KLALB V3.6.0 写了一半
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
package org.kne.cloud.network.srv6;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
|
||||
public class DetNetSRv6TLV extends IPv6SegmentRoutingTLV {
|
||||
|
||||
// 标志位掩码定义
|
||||
public static final int FLAG_GUARANTEED_DELIVERY = 0x01; // 第1位: 承诺送达
|
||||
public static final int FLAG_AVOID_REORDERING = 0x02; // 第2位: 避免乱序
|
||||
public static final int FLAG_RESOURCE_RESERVED = 0x04; // 第3位: 资源预留
|
||||
public static final int FLAG_EXPLICIT_ROUTE = 0x08; // 第4位: 显式路由
|
||||
|
||||
// 保留其他位用于未来扩展 (0x10, 0x20, 0x40, 0x80)
|
||||
|
||||
public DetNetSRv6TLV(ByteBuffer buffer) {
|
||||
super(buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
*/
|
||||
public DetNetSRv6TLV(boolean guaranteedDelivery, boolean avoidReordering,
|
||||
boolean resourceReserved, boolean explicitRoute) {
|
||||
super(IPv6SegmentRoutingTLV.DETNET); // 使用建议的TLV类型编号
|
||||
|
||||
int flags = 0;
|
||||
if (guaranteedDelivery) flags |= FLAG_GUARANTEED_DELIVERY;
|
||||
if (avoidReordering) flags |= FLAG_AVOID_REORDERING;
|
||||
if (resourceReserved) flags |= FLAG_RESOURCE_RESERVED;
|
||||
if (explicitRoute) flags |= FLAG_EXPLICIT_ROUTE;
|
||||
|
||||
setFlags(flags);
|
||||
|
||||
// DetNet TLV数据部分:1字节标志位 + 5字节保留
|
||||
getData().put(1, (byte) 0); // 保留
|
||||
getData().put(2, (byte) 0); // 保留
|
||||
getData().put(3, (byte) 0); // 保留
|
||||
getData().put(4, (byte) 0); // 保留
|
||||
getData().put(5, (byte) 0); // 保留
|
||||
|
||||
getData().limit(6); // 总数据长度4字节
|
||||
}
|
||||
|
||||
public int getFlags() {
|
||||
return getData().get(0) & 0xff;
|
||||
}
|
||||
|
||||
public void setFlags(int flags) {
|
||||
getData().put(0, (byte) flags);
|
||||
}
|
||||
// 标志位getter/setter方法
|
||||
public boolean isGuaranteedDelivery() {
|
||||
return (getData().get(0) & FLAG_GUARANTEED_DELIVERY) != 0;
|
||||
}
|
||||
|
||||
public void setGuaranteedDelivery(boolean enabled) {
|
||||
byte flags = getData().get(0);
|
||||
if (enabled) {
|
||||
flags |= FLAG_GUARANTEED_DELIVERY;
|
||||
} else {
|
||||
flags &= ~FLAG_GUARANTEED_DELIVERY;
|
||||
}
|
||||
getData().put(0, flags);
|
||||
}
|
||||
|
||||
public boolean isAvoidReordering() {
|
||||
return (getData().get(0) & FLAG_AVOID_REORDERING) != 0;
|
||||
}
|
||||
|
||||
public void setAvoidReordering(boolean enabled) {
|
||||
byte flags = getData().get(0);
|
||||
if (enabled) {
|
||||
flags |= FLAG_AVOID_REORDERING;
|
||||
} else {
|
||||
flags &= ~FLAG_AVOID_REORDERING;
|
||||
}
|
||||
getData().put(0, flags);
|
||||
}
|
||||
|
||||
public boolean isResourceReserved() {
|
||||
return (getData().get(0) & FLAG_RESOURCE_RESERVED) != 0;
|
||||
}
|
||||
|
||||
public void setResourceReserved(boolean enabled) {
|
||||
byte flags = getData().get(0);
|
||||
if (enabled) {
|
||||
flags |= FLAG_RESOURCE_RESERVED;
|
||||
} else {
|
||||
flags &= ~FLAG_RESOURCE_RESERVED;
|
||||
}
|
||||
getData().put(0, flags);
|
||||
}
|
||||
|
||||
public boolean isExplicitRoute() {
|
||||
return (getData().get(0) & FLAG_EXPLICIT_ROUTE) != 0;
|
||||
}
|
||||
|
||||
public void setExplicitRoute(boolean enabled) {
|
||||
byte flags = getData().get(0);
|
||||
if (enabled) {
|
||||
flags |= FLAG_EXPLICIT_ROUTE;
|
||||
} else {
|
||||
flags &= ~FLAG_EXPLICIT_ROUTE;
|
||||
}
|
||||
getData().put(0, flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DetNetSRv6TLV [" +
|
||||
"guaranteedDelivery=" + isGuaranteedDelivery() +
|
||||
", avoidReordering=" + isAvoidReordering() +
|
||||
", resourceReserved=" + isResourceReserved() +
|
||||
", explicitRoute=" + isExplicitRoute() + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToChannel(WritableByteChannel dto) throws IOException {
|
||||
super.writeToChannel(dto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromChannel(ReadableByteChannel din, long length) throws IOException {
|
||||
super.readFromChannel(din, length);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user