修复了SRH插入失败导致无法转发的bug
This commit is contained in:
@@ -15,11 +15,18 @@ public abstract class AbstractIPv6NetworkLink implements IPv6NetworkLink {
|
||||
private SRv6Router srv6Router;
|
||||
private final boolean loopback;
|
||||
|
||||
private final boolean filter;
|
||||
|
||||
|
||||
public AbstractIPv6NetworkLink(boolean loopback) {
|
||||
super();
|
||||
this.loopback = loopback;
|
||||
this.filter = false;
|
||||
}
|
||||
public AbstractIPv6NetworkLink(boolean loopback, boolean filter) {
|
||||
super();
|
||||
this.loopback = loopback;
|
||||
this.filter = filter;
|
||||
}
|
||||
|
||||
public SRv6Router getSrv6Router() {
|
||||
@@ -108,4 +115,9 @@ public abstract class AbstractIPv6NetworkLink implements IPv6NetworkLink {
|
||||
}
|
||||
return rlist;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFilter() {
|
||||
return filter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,4 +30,5 @@ public interface IPv6NetworkLink {
|
||||
public void addIPv6LinkStateListener(IPv6LinkStateListener listener);
|
||||
public void removeIPv6LinkStateListener(IPv6LinkStateListener listener);
|
||||
|
||||
public boolean isFilter();
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ public class SRHInsertNetworkLink extends AbstractIPv6NetworkLink {
|
||||
private IPv6AddressGroup ipgroup;
|
||||
|
||||
public SRHInsertNetworkLink(SRv6Router sRv6Router,IPv6AddressGroup ipgroup) {
|
||||
super(false);
|
||||
super(false,true);
|
||||
setSRv6Router(sRv6Router);
|
||||
this.ipgroup=ipgroup;
|
||||
}
|
||||
@@ -28,9 +28,10 @@ public class SRHInsertNetworkLink extends AbstractIPv6NetworkLink {
|
||||
|
||||
@Override
|
||||
public void sendPacket(IPv6Packet pack, IPv6Address inet6Address) throws IOException {
|
||||
getSrv6Router().insertSRHeader( pack);
|
||||
if(getSrv6Router().insertSRHeader( pack)) {
|
||||
getSrv6Router().insertHeaderAndRoutePacket(null, pack);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RouteItem> getRouteItems() {
|
||||
|
||||
@@ -578,16 +578,19 @@ public class SRv6Router {
|
||||
sendPacketToRouteItem(linkfrom,iPv6Packet, ri);
|
||||
}
|
||||
} else { // 普通链路处理
|
||||
if(ri.getDestlink().isFilter()){
|
||||
|
||||
}else {
|
||||
// 检查重路由计数
|
||||
int count = iPv6Packet.getRouteCounter().getAndIncrement();
|
||||
if (count >= MAX_REROUTE_COUNT) {
|
||||
if (count > MAX_REROUTE_COUNT) {
|
||||
return; // 超过最大重路由次数,丢弃
|
||||
}
|
||||
|
||||
if (count <= 0) {
|
||||
hop--; // 减少TTL(非重路由时)
|
||||
}
|
||||
|
||||
}
|
||||
if (hop > 0) { // TTL有效
|
||||
iPv6Packet.setHopLimit(hop); // 更新TTL
|
||||
sendPacketToRouteItem(linkfrom,iPv6Packet, ri); // 发送数据包
|
||||
|
||||
Reference in New Issue
Block a user