forked from KNEMC/KLALB
隧道链接改成标准URI格式
This commit is contained in:
@@ -1,29 +1,14 @@
|
||||
package org.kne.cloud.network.srv6;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.EOFException;
|
||||
import java.io.Externalizable;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInput;
|
||||
import java.io.ObjectOutput;
|
||||
import java.io.Serializable;
|
||||
import java.net.Inet6Address;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import org.kne.cloud.network.MultipurposeSocketAddress;
|
||||
import org.kne.cloud.network.NetworkPacket;
|
||||
import org.kne.cloud.network.ipv6.IPv6AddressGroup;
|
||||
import org.kne.cloud.network.MultiProtocolSocketAddress;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
@@ -53,7 +38,7 @@ public class JsonDataPacket extends KLALBRoutingProtocolPacket implements Serial
|
||||
private static Gson gson;
|
||||
static{
|
||||
GsonBuilder gb=new GsonBuilder();
|
||||
MultipurposeSocketAddress.registerToGsonBuilder(gb);
|
||||
MultiProtocolSocketAddress.registerToGsonBuilder(gb);
|
||||
gson=gb.create();
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.kne.cloud.network.MultipurposeSocketAddress;
|
||||
import org.kne.cloud.network.MultiProtocolSocketAddress;
|
||||
import org.kne.cloud.network.congestion.NOCongestionAlgorithm;
|
||||
import org.kne.cloud.network.congestion.SendPacketSlidingWindow;
|
||||
import org.kne.opencl64.Releaser;
|
||||
@@ -33,16 +33,16 @@ public class KLALBRoutingProtocolAPIClient {
|
||||
|
||||
if ((relate = window.ack(ruid)) != null) {
|
||||
List<?> connects = (List<?>) dataobj.getData();
|
||||
List<MultipurposeSocketAddress> connectsm = new ArrayList<MultipurposeSocketAddress>(connects.size());
|
||||
List<MultiProtocolSocketAddress> connectsm = new ArrayList<MultiProtocolSocketAddress>(connects.size());
|
||||
for (Object open : connects) {
|
||||
if (open instanceof MultipurposeSocketAddress) {
|
||||
connectsm.add((MultipurposeSocketAddress) open);
|
||||
if (open instanceof MultiProtocolSocketAddress) {
|
||||
connectsm.add((MultiProtocolSocketAddress) open);
|
||||
} else {
|
||||
connectsm.add(new MultipurposeSocketAddress((String) open));
|
||||
connectsm.add(new MultiProtocolSocketAddress((String) open));
|
||||
|
||||
}
|
||||
}
|
||||
((Consumer<List<MultipurposeSocketAddress>>) relate.getUserCallback()).accept(connectsm);
|
||||
((Consumer<List<MultiProtocolSocketAddress>>) relate.getUserCallback()).accept(connectsm);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -56,7 +56,7 @@ public class KLALBRoutingProtocolAPIClient {
|
||||
clr.register(this, releaser);
|
||||
}
|
||||
|
||||
public void requestOpenLines(SocketAddress addr, Consumer<List<MultipurposeSocketAddress>> callback)
|
||||
public void requestOpenLines(SocketAddress addr, Consumer<List<MultiProtocolSocketAddress>> callback)
|
||||
throws IOException {
|
||||
UUID suid = UUID.randomUUID();
|
||||
KLALBRoutingProtocolJsonData json = new KLALBRoutingProtocolJsonData(
|
||||
|
||||
@@ -4,13 +4,8 @@ import java.io.IOException;
|
||||
import java.lang.ref.Cleaner;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import org.kne.cloud.network.MultipurposeSocketAddress;
|
||||
import org.kne.cloud.network.ThreadTool;
|
||||
import org.kne.cloud.network.congestion.SendPacketSlidingWindow;
|
||||
import org.kne.cloud.network.klalb.KLALBController;
|
||||
import org.kne.opencl64.Releaser;
|
||||
|
||||
|
||||
@@ -46,6 +46,8 @@ import org.kne.cloud.network.ipv6.PostcardEntry;
|
||||
import org.kne.cloud.network.ipv6.RouteItem;
|
||||
import org.kne.cloud.network.klalb.KLALBRemoteLink;
|
||||
import org.kne.cloud.network.klalb.KLALBUtils;
|
||||
import org.kne.cloud.network.klalb.PerformanceStrategy;
|
||||
import org.kne.cloud.network.klalb.ui.PerformanceStrategyItem;
|
||||
import org.kne.concurrent.HighPerformanceExecutor2;
|
||||
import org.kne.concurrent.TimeoutConcurrentHashMap;
|
||||
import org.pcap4j.packet.IllegalRawDataException;
|
||||
@@ -62,6 +64,8 @@ public class SRv6Router {
|
||||
|
||||
private static final int IPv6_BITS = 128; // IPv6地址位数
|
||||
|
||||
private PerformanceStrategy performanceStrategy=PerformanceStrategy.MULTI_FILL;
|
||||
|
||||
/*private TimeoutConcurrentHashMap<FlowSession, PacketIDGenerator> flowIDmap = new TimeoutConcurrentHashMap<FlowSession, PacketIDGenerator>(
|
||||
60000000000L);
|
||||
*/
|
||||
@@ -161,6 +165,14 @@ public class SRv6Router {
|
||||
|
||||
};
|
||||
|
||||
public void setPerformanceStrategy(PerformanceStrategy performanceStrategy) {
|
||||
this.performanceStrategy=performanceStrategy;
|
||||
}
|
||||
|
||||
public PerformanceStrategy getPerformanceStrategy(){
|
||||
return performanceStrategy;
|
||||
}
|
||||
|
||||
// 链路状态监听器实现
|
||||
private class LinkListener implements IPv6LinkStateListener {
|
||||
|
||||
@@ -765,44 +777,44 @@ public class SRv6Router {
|
||||
|
||||
//private static HighPerformanceExecutor2 defaultExecutor = new HighPerformanceExecutor2(4, Thread.ofVirtual().name("SRv6 Routing").factory());
|
||||
|
||||
public static HighPerformanceExecutor2 getDefaultExecutor() {
|
||||
/*public static HighPerformanceExecutor2 getDefaultExecutor() {
|
||||
return defaultExecutor;
|
||||
}
|
||||
}*/
|
||||
|
||||
// private ArrayBlockingQueue<Supplier<IPv6Packet>> packetQueue=new
|
||||
// ArrayBlockingQueue<>(10000);
|
||||
public void enqueuePacketSendTask(Supplier<IPv6Packet> sendTask) {
|
||||
// packetQueue.add(object);
|
||||
defaultExecutor.executeWithCongestionReport((state) -> {
|
||||
try {
|
||||
long start=System.nanoTime();
|
||||
IPv6Packet packet=sendTask.get();
|
||||
if(state) {
|
||||
packet.markCE();
|
||||
}
|
||||
insertSRHandRoutePacket(null, packet); // 插入SRH并路由
|
||||
long time=System.nanoTime()-start;
|
||||
backplaneCount(time,state);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
},20);
|
||||
switch(performanceStrategy) {
|
||||
case SINGLE_CORE:
|
||||
runPacketSendTask0(sendTask, false);
|
||||
break;
|
||||
case MULTI_FILL:
|
||||
case MULTI_SCATTER:
|
||||
defaultExecutor.executeWithCongestionReport((state) -> {
|
||||
runPacketSendTask0(sendTask, state);
|
||||
}, 20,performanceStrategy);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
public void runPacketSendTask(Supplier<IPv6Packet> sendTask) {
|
||||
public void runPacketSendTask0(Supplier<IPv6Packet> sendTask,boolean ecn) {
|
||||
try {
|
||||
boolean state=false;
|
||||
long start=System.nanoTime();
|
||||
IPv6Packet packet=sendTask.get();
|
||||
if(state) {
|
||||
if(ecn) {
|
||||
packet.markCE();
|
||||
}
|
||||
insertSRHandRoutePacket(null, packet); // 插入SRH并路由
|
||||
long time=System.nanoTime()-start;
|
||||
backplaneCount(time,state);
|
||||
backplaneCount(time,ecn);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
public void runPacketSendTask(Supplier<IPv6Packet> sendTask) {
|
||||
runPacketSendTask0(sendTask,false);
|
||||
}
|
||||
|
||||
public void onReceive(IPv6NetworkLink link,IPv6Packet t){
|
||||
if (unduplicate(t)) {
|
||||
@@ -824,7 +836,7 @@ public class SRv6Router {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
},20);
|
||||
},20,performanceStrategy);
|
||||
}
|
||||
|
||||
public void enqueuePacket(IPv6Packet packet) {
|
||||
|
||||
Reference in New Issue
Block a user