import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.mdsalutil.MDSALUtil;
import org.opendaylight.genius.mdsalutil.NwConstants;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
import org.opendaylight.netvirt.elanmanager.api.IElanService;
import org.opendaylight.netvirt.ipv6service.api.ElementCache;
import org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork;
private final ConcurrentMap<Uuid, List<VirtualPort>> unprocessedSubnetIntfs = new ConcurrentHashMap<>();
private final OdlInterfaceRpcService interfaceManagerRpc;
private final IElanService elanProvider;
- private final IMdsalApiManager mdsalUtil;
- private final Ipv6ServiceUtils ipv6ServiceUtils = new Ipv6ServiceUtils();
+ private final Ipv6ServiceUtils ipv6ServiceUtils;
private final DataBroker dataBroker;
private final PacketProcessingService packetService;
private final Ipv6PeriodicTrQueue ipv6Queue = new Ipv6PeriodicTrQueue(portId -> transmitUnsolicitedRA(portId));
@Inject
public IfMgr(DataBroker dataBroker, IElanService elanProvider, OdlInterfaceRpcService interfaceManagerRpc,
- IMdsalApiManager mdsalUtil, PacketProcessingService packetService) {
+ PacketProcessingService packetService, Ipv6ServiceUtils ipv6ServiceUtils) {
this.dataBroker = dataBroker;
this.elanProvider = elanProvider;
this.interfaceManagerRpc = interfaceManagerRpc;
- this.mdsalUtil = mdsalUtil;
this.packetService = packetService;
+ this.ipv6ServiceUtils = ipv6ServiceUtils;
LOG.info("IfMgr is enabled");
}
if (prevIntf == null) {
Long elanTag = getNetworkElanTag(networkId);
// Do service binding for the port and set the serviceBindingStatus to true.
- ipv6ServiceUtils.bindIpv6Service(dataBroker, portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
+ ipv6ServiceUtils.bindIpv6Service(portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
intf.setServiceBindingStatus(true);
/* Update the intf dpnId/ofPort from the Operational Store */
if (!intf.getServiceBindingStatus()) {
Long elanTag = getNetworkElanTag(intf.getNetworkID());
LOG.info("In updateHostIntf, service binding for portId {}", portId);
- ipv6ServiceUtils.bindIpv6Service(dataBroker, portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
+ ipv6ServiceUtils.bindIpv6Service(portId.getValue(), elanTag, NwConstants.IPV6_TABLE);
intf.setServiceBindingStatus(true);
}
} else {
public void updateInterfaceDpidOfPortInfo(Uuid portId) {
LOG.debug("In updateInterfaceDpidOfPortInfo portId {}", portId);
- Interface interfaceState = Ipv6ServiceUtils.getInterfaceStateFromOperDS(dataBroker, portId.getValue());
+ Interface interfaceState = ipv6ServiceUtils.getInterfaceStateFromOperDS(portId.getValue());
if (interfaceState == null) {
LOG.warn("In updateInterfaceDpidOfPortInfo, port info not found in Operational Store {}.", portId);
return;
flowStatus = vnet.getRSPuntFlowStatusOnDpnId(dpId);
if (action == Ipv6Constants.ADD_FLOW && flowStatus == Ipv6Constants.FLOWS_NOT_CONFIGURED) {
ipv6ServiceUtils.installIcmpv6RsPuntFlow(NwConstants.IPV6_TABLE, dpId, elanTag,
- mdsalUtil, Ipv6Constants.ADD_FLOW);
+ Ipv6Constants.ADD_FLOW);
vnet.setRSPuntFlowStatusOnDpnId(dpId, Ipv6Constants.FLOWS_CONFIGURED);
} else if (action == Ipv6Constants.DEL_FLOW && flowStatus == Ipv6Constants.FLOWS_CONFIGURED) {
ipv6ServiceUtils.installIcmpv6RsPuntFlow(NwConstants.IPV6_TABLE, dpId, elanTag,
- mdsalUtil, Ipv6Constants.DEL_FLOW);
+ Ipv6Constants.DEL_FLOW);
vnet.setRSPuntFlowStatusOnDpnId(dpId, Ipv6Constants.FLOWS_NOT_CONFIGURED);
}
}
for (VirtualNetwork.DpnInterfaceInfo dpnIfaceInfo : dpnIfaceList) {
if (action == Ipv6Constants.ADD_FLOW && !dpnIfaceInfo.ndTargetFlowsPunted.contains(ipv6Address)) {
ipv6ServiceUtils.installIcmpv6NsPuntFlow(NwConstants.IPV6_TABLE, dpnIfaceInfo.getDpId(),
- elanTag, ipv6Address.getValue(), mdsalUtil, Ipv6Constants.ADD_FLOW);
+ elanTag, ipv6Address.getValue(), Ipv6Constants.ADD_FLOW);
dpnIfaceInfo.updateNDTargetAddress(ipv6Address, action);
} else if (action == Ipv6Constants.DEL_FLOW && dpnIfaceInfo.ndTargetFlowsPunted.contains(ipv6Address)) {
ipv6ServiceUtils.installIcmpv6NsPuntFlow(NwConstants.IPV6_TABLE, dpnIfaceInfo.getDpId(),
- elanTag, ipv6Address.getValue(), mdsalUtil, Ipv6Constants.DEL_FLOW);
+ elanTag, ipv6Address.getValue(), Ipv6Constants.DEL_FLOW);
dpnIfaceInfo.updateNDTargetAddress(ipv6Address, action);
}
}
Long elanTag = getNetworkElanTag(routerPort.getNetworkID());
if (vnet.getRSPuntFlowStatusOnDpnId(dpId) == Ipv6Constants.FLOWS_NOT_CONFIGURED) {
ipv6ServiceUtils.installIcmpv6RsPuntFlow(NwConstants.IPV6_TABLE, dpId, elanTag,
- mdsalUtil, Ipv6Constants.ADD_FLOW);
+ Ipv6Constants.ADD_FLOW);
vnet.setRSPuntFlowStatusOnDpnId(dpId, Ipv6Constants.FLOWS_CONFIGURED);
}
for (Ipv6Address ipv6Address: routerPort.getIpv6Addresses()) {
if (!dpnInfo.ndTargetFlowsPunted.contains(ipv6Address)) {
ipv6ServiceUtils.installIcmpv6NsPuntFlow(NwConstants.IPV6_TABLE, dpId,
- elanTag, ipv6Address.getValue(), mdsalUtil, Ipv6Constants.ADD_FLOW);
+ elanTag, ipv6Address.getValue(), Ipv6Constants.ADD_FLOW);
dpnInfo.updateNDTargetAddress(ipv6Address, Ipv6Constants.ADD_FLOW);
}
}
public class Ipv6NeighborSolicitation {
private static final Logger LOG = LoggerFactory.getLogger(Ipv6RouterAdvt.class);
private final PacketProcessingService packetService;
- private final Ipv6ServiceUtils ipv6Utils;
public Ipv6NeighborSolicitation(PacketProcessingService packetService) {
this.packetService = packetService;
- ipv6Utils = Ipv6ServiceUtils.getInstance();
}
private byte[] frameNeighborSolicitationRequest(MacAddress srcMacAddress, Ipv6Address srcIpv6Address,
Ipv6Address targetIpv6Address) {
- MacAddress macAddress = ipv6Utils.getIpv6MulticastMacAddress(targetIpv6Address);
- Ipv6Address snMcastAddr = ipv6Utils.getIpv6SolicitedNodeMcastAddress(targetIpv6Address);
+ MacAddress macAddress = Ipv6ServiceUtils.getIpv6MulticastMacAddress(targetIpv6Address);
+ Ipv6Address snMcastAddr = Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(targetIpv6Address);
NeighborSolicitationPacketBuilder nsPacket = new NeighborSolicitationPacketBuilder();
nsPacket.setSourceMac(srcMacAddress);
buf.put((byte)pdu.getOptionType().shortValue());
buf.put((byte)pdu.getSourceAddrLength().shortValue());
- buf.put(ipv6Utils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
+ buf.put(Ipv6ServiceUtils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
return data;
}
private byte[] fillNeighborSolicitationPacket(NeighborSolicitationPacket pdu) {
ByteBuffer buf = ByteBuffer.allocate(Ipv6Constants.ICMPV6_OFFSET + pdu.getIpv6Length());
- buf.put(ipv6Utils.convertEthernetHeaderToByte(pdu), 0, 14);
- buf.put(ipv6Utils.convertIpv6HeaderToByte(pdu), 0, 40);
+ buf.put(Ipv6ServiceUtils.convertEthernetHeaderToByte(pdu), 0, 14);
+ buf.put(Ipv6ServiceUtils.convertIpv6HeaderToByte(pdu), 0, 40);
buf.put(icmp6NsPayloadtoByte(pdu), 0, pdu.getIpv6Length());
- int checksum = ipv6Utils.calcIcmpv6Checksum(buf.array(), pdu);
+ int checksum = Ipv6ServiceUtils.calcIcmpv6Checksum(buf.array(), pdu);
buf.putShort(Ipv6Constants.ICMPV6_OFFSET + 2, (short)checksum);
return buf.array();
}
private final AtomicLong pktProccessedCounter = new AtomicLong(0);
private final PacketProcessingService pktService;
private final IfMgr ifMgr;
- private final Ipv6ServiceUtils ipv6Utils;
private final ExecutorService packetProcessor = Executors.newCachedThreadPool();
@Inject
public Ipv6PktHandler(PacketProcessingService pktService, IfMgr ifMgr) {
this.pktService = pktService;
this.ifMgr = ifMgr;
- this.ipv6Utils = Ipv6ServiceUtils.getInstance();
}
@Override
byte[] data = packet.getPayload();
NeighborSolicitationPacket nsPdu = deserializeNSPacket(data);
Ipv6Header ipv6Header = nsPdu;
- if (ipv6Utils.validateChecksum(data, ipv6Header, nsPdu.getIcmp6Chksum()) == false) {
+ if (Ipv6ServiceUtils.validateChecksum(data, ipv6Header, nsPdu.getIcmp6Chksum()) == false) {
pktProccessedCounter.incrementAndGet();
LOG.warn("Received Neighbor Solicitation with invalid checksum on {}. Ignoring the packet.",
packet.getIngress());
try {
nsPdu.setDestinationMac(new MacAddress(
- ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+ Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
bitOffset = bitOffset + 48;
nsPdu.setSourceMac(new MacAddress(
- ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+ Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
bitOffset = bitOffset + 48;
nsPdu.setEthertype(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
}
buf.put((byte)pdu.getOptionType().shortValue());
buf.put((byte)pdu.getTargetAddrLength().shortValue());
- buf.put(ipv6Utils.bytesFromHexString(pdu.getTargetLlAddress().getValue()));
+ buf.put(Ipv6ServiceUtils.bytesFromHexString(pdu.getTargetLlAddress().getValue()));
return data;
}
private byte[] fillNeighborAdvertisementPacket(NeighborAdvertisePacket pdu) {
ByteBuffer buf = ByteBuffer.allocate(Ipv6Constants.ICMPV6_OFFSET + pdu.getIpv6Length());
- buf.put(ipv6Utils.convertEthernetHeaderToByte(pdu), 0, 14);
- buf.put(ipv6Utils.convertIpv6HeaderToByte(pdu), 0, 40);
+ buf.put(Ipv6ServiceUtils.convertEthernetHeaderToByte(pdu), 0, 14);
+ buf.put(Ipv6ServiceUtils.convertIpv6HeaderToByte(pdu), 0, 40);
buf.put(icmp6NAPayloadtoByte(pdu), 0, pdu.getIpv6Length());
- int checksum = ipv6Utils.calcIcmpv6Checksum(buf.array(), pdu);
+ int checksum = Ipv6ServiceUtils.calcIcmpv6Checksum(buf.array(), pdu);
buf.putShort(Ipv6Constants.ICMPV6_OFFSET + 2, (short)checksum);
return buf.array();
}
byte[] data = packet.getPayload();
RouterSolicitationPacket rsPdu = deserializeRSPacket(data);
Ipv6Header ipv6Header = rsPdu;
- if (ipv6Utils.validateChecksum(data, ipv6Header, rsPdu.getIcmp6Chksum()) == false) {
+ if (Ipv6ServiceUtils.validateChecksum(data, ipv6Header, rsPdu.getIcmp6Chksum()) == false) {
pktProccessedCounter.incrementAndGet();
LOG.warn("Received RS packet with invalid checksum on {}. Ignoring the packet.",
packet.getIngress());
try {
rsPdu.setDestinationMac(new MacAddress(
- ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+ Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
bitOffset = bitOffset + 48;
rsPdu.setSourceMac(new MacAddress(
- ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+ Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
bitOffset = bitOffset + 48;
rsPdu.setEthertype(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
bitOffset = bitOffset + 8;
if (rsPdu.getOptionType() == Ipv6Constants.ICMP_V6_OPTION_SOURCE_LLA) {
rsPdu.setSourceLlAddress(new MacAddress(
- ipv6Utils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
+ Ipv6ServiceUtils.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
}
}
} catch (BufferException | UnknownHostException e) {
public class Ipv6RouterAdvt {
private static final Logger LOG = LoggerFactory.getLogger(Ipv6RouterAdvt.class);
private final PacketProcessingService packetService;
- private final Ipv6ServiceUtils ipv6Utils;
public Ipv6RouterAdvt(PacketProcessingService packetService) {
this.packetService = packetService;
- ipv6Utils = Ipv6ServiceUtils.getInstance();
}
public boolean transmitRtrAdvertisement(Ipv6RtrAdvertType raType, VirtualPort routerPort,
+ prefixListLength * Ipv6Constants.ICMPV6_OPTION_PREFIX_LENGTH);
raPacket.setNextHeader(Ipv6Constants.ICMP6_NHEADER);
raPacket.setHopLimit(Ipv6Constants.ICMP_V6_MAX_HOP_LIMIT);
- raPacket.setSourceIpv6(ipv6Utils.getIpv6LinkLocalAddressFromMac(sourceMac));
+ raPacket.setSourceIpv6(Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(sourceMac));
raPacket.setIcmp6Type(Ipv6Constants.ICMP_V6_RA_CODE);
raPacket.setIcmp6Code((short)0);
private byte[] fillRouterAdvertisementPacket(RouterAdvertisementPacket pdu) {
ByteBuffer buf = ByteBuffer.allocate(Ipv6Constants.ICMPV6_OFFSET + pdu.getIpv6Length());
- buf.put(ipv6Utils.convertEthernetHeaderToByte(pdu), 0, 14);
- buf.put(ipv6Utils.convertIpv6HeaderToByte(pdu), 0, 40);
+ buf.put(Ipv6ServiceUtils.convertEthernetHeaderToByte(pdu), 0, 14);
+ buf.put(Ipv6ServiceUtils.convertIpv6HeaderToByte(pdu), 0, 40);
buf.put(icmp6RAPayloadtoByte(pdu), 0, pdu.getIpv6Length());
- int checksum = ipv6Utils.calcIcmpv6Checksum(buf.array(), pdu);
+ int checksum = Ipv6ServiceUtils.calcIcmpv6Checksum(buf.array(), pdu);
buf.putShort(Ipv6Constants.ICMPV6_OFFSET + 2, (short)checksum);
return buf.array();
}
buf.putInt((int)pdu.getRetransTime().longValue());
buf.put((byte)pdu.getOptionSourceAddr().shortValue());
buf.put((byte)pdu.getSourceAddrLength().shortValue());
- buf.put(ipv6Utils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
+ buf.put(Ipv6ServiceUtils.bytesFromHexString(pdu.getSourceLlAddress().getValue()));
for (PrefixList prefix : pdu.getPrefixList()) {
buf.put((byte)prefix.getOptionType().shortValue());
private static final Logger LOG = LoggerFactory.getLogger(Ipv6ServiceInterfaceEventListener.class);
private final DataBroker dataBroker;
private final IfMgr ifMgr;
+ private final Ipv6ServiceUtils ipv6ServiceUtils;
/**
* Intialize the member variables.
* @param broker the data broker instance.
*/
@Inject
- public Ipv6ServiceInterfaceEventListener(DataBroker broker, IfMgr ifMgr) {
+ public Ipv6ServiceInterfaceEventListener(DataBroker broker, IfMgr ifMgr, Ipv6ServiceUtils ipv6ServiceUtils) {
super(Interface.class, Ipv6ServiceInterfaceEventListener.class);
this.dataBroker = broker;
this.ifMgr = ifMgr;
+ this.ipv6ServiceUtils = ipv6ServiceUtils;
}
@Override
}
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface iface;
- iface = Ipv6ServiceUtils.getInterface(dataBroker, add.getName());
+ iface = ipv6ServiceUtils.getInterface(add.getName());
if (null != iface) {
LOG.debug("Port {} is a Neutron port", iface.getName());
NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
subnetInfo -> Stream.of(subnetInfo.getIpAddr().getIpv6Address())).collect(Collectors.toList());
if (deviceOwner.equalsIgnoreCase(Ipv6Constants.NETWORK_ROUTER_INTERFACE)) {
- Ipv6ServiceUtils ipv6Utils = Ipv6ServiceUtils.getInstance();
- Ipv6Address llAddr = ipv6Utils.getIpv6LinkLocalAddressFromMac(new MacAddress(macAddress));
+ Ipv6Address llAddr = Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(new MacAddress(macAddress));
ipv6AddrList.add(llAddr);
}
return ipv6AddrList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import org.apache.commons.lang3.StringUtils;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Singleton
public class Ipv6ServiceUtils {
private static final Logger LOG = LoggerFactory.getLogger(Ipv6ServiceUtils.class);
- public static final Ipv6ServiceUtils INSTANCE = new Ipv6ServiceUtils();
public static final Ipv6Address ALL_NODES_MCAST_ADDR = newIpv6Address("0:0:0:0:0:0:0:0");
public static final Ipv6Address UNSPECIFIED_ADDR = newIpv6Address("FF02::1");
}
}
- public Ipv6ServiceUtils() {
- }
+ private final DataBroker broker;
+ private final IMdsalApiManager mdsalUtil;
- public static Ipv6ServiceUtils getInstance() {
- return INSTANCE;
+ @Inject
+ public Ipv6ServiceUtils(DataBroker broker, IMdsalApiManager mdsalUtil) {
+ this.broker = broker;
+ this.mdsalUtil = mdsalUtil;
}
/**
* Retrieves the object from the datastore.
- * @param broker the data broker.
* @param datastoreType the data store type.
* @param path the wild card path.
* @return the required object.
*/
- public static <T extends DataObject> Optional<T> read(DataBroker broker, LogicalDatastoreType datastoreType,
- InstanceIdentifier<T> path) {
+ public <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType, InstanceIdentifier<T> path) {
try (ReadOnlyTransaction tx = broker.newReadOnlyTransaction()) {
return tx.read(datastoreType, path).get();
} catch (InterruptedException | ExecutionException e) {
/**
* Retrieves the Interface from the datastore.
- * @param broker the data broker
* @param interfaceName the interface name
* @return the interface.
*/
- public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
- .Interface getInterface(DataBroker broker, String interfaceName) {
+ public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
+ .Interface getInterface(String interfaceName) {
Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
.Interface> optInterface =
- read(broker, LogicalDatastoreType.CONFIGURATION, getInterfaceIdentifier(interfaceName));
+ read(LogicalDatastoreType.CONFIGURATION, getInterfaceIdentifier(interfaceName));
if (optInterface.isPresent()) {
return optInterface.get();
}
/**
* Retrieves the interface state.
- * @param dataBroker the data broker.
* @param interfaceName the interface name.
* @return the interface state.
*/
- public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
- .Interface getInterfaceStateFromOperDS(DataBroker dataBroker, String interfaceName) {
+ public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
+ .Interface getInterfaceStateFromOperDS(String interfaceName) {
InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508
.interfaces.state.Interface> ifStateId = buildStateInterfaceId(interfaceName);
- return MDSALUtil.read(LogicalDatastoreType.OPERATIONAL, ifStateId, dataBroker).orNull();
+ return MDSALUtil.read(LogicalDatastoreType.OPERATIONAL, ifStateId, broker).orNull();
}
- public String bytesToHexString(byte[] bytes) {
+ public static String bytesToHexString(byte[] bytes) {
if (bytes == null) {
return "null";
}
return buf.toString();
}
- public byte[] bytesFromHexString(String values) {
+ public static byte[] bytesFromHexString(String values) {
String target = "";
if (values != null) {
target = values;
return ret;
}
- public int calcIcmpv6Checksum(byte[] packet, Ipv6Header ip6Hdr) {
+ public static int calcIcmpv6Checksum(byte[] packet, Ipv6Header ip6Hdr) {
long checksum = getSummation(ip6Hdr.getSourceIpv6());
checksum += getSummation(ip6Hdr.getDestinationIpv6());
checksum = normalizeChecksum(checksum);
return finalChecksum;
}
- public boolean validateChecksum(byte[] packet, Ipv6Header ip6Hdr, int recvChecksum) {
+ public static boolean validateChecksum(byte[] packet, Ipv6Header ip6Hdr, int recvChecksum) {
return calcIcmpv6Checksum(packet, ip6Hdr) == recvChecksum;
}
- private long getSummation(Ipv6Address addr) {
+ private static long getSummation(Ipv6Address addr) {
byte[] baddr = null;
try {
baddr = InetAddress.getByName(addr.getValue()).getAddress();
return sum;
}
- private long normalizeChecksum(long value) {
+ private static long normalizeChecksum(long value) {
if ((value & 0xffff0000) != 0) {
value = value & 0xffff;
value += 1;
return value;
}
- public byte[] convertEthernetHeaderToByte(EthernetHeader ethPdu) {
+ public static byte[] convertEthernetHeaderToByte(EthernetHeader ethPdu) {
byte[] data = new byte[16];
Arrays.fill(data, (byte)0);
return data;
}
- public byte[] convertIpv6HeaderToByte(Ipv6Header ip6Pdu) {
+ public static byte[] convertIpv6HeaderToByte(Ipv6Header ip6Pdu) {
byte[] data = new byte[128];
Arrays.fill(data, (byte)0);
return data;
}
- public Ipv6Address getIpv6LinkLocalAddressFromMac(MacAddress mac) {
+ public static Ipv6Address getIpv6LinkLocalAddressFromMac(MacAddress mac) {
byte[] octets = bytesFromHexString(mac.getValue());
/* As per the RFC2373, steps involved to generate a LLA include
return ipv6LLA;
}
- public Ipv6Address getIpv6SolicitedNodeMcastAddress(Ipv6Address ipv6Address) {
+ public static Ipv6Address getIpv6SolicitedNodeMcastAddress(Ipv6Address ipv6Address) {
/* According to RFC 4291, a Solicited Node Multicast Address is derived by adding the 24
lower order bits with the Solicited Node multicast prefix (i.e., FF02::1:FF00:0/104).
return solictedV6Address;
}
- public MacAddress getIpv6MulticastMacAddress(Ipv6Address ipv6Address) {
+ public static MacAddress getIpv6MulticastMacAddress(Ipv6Address ipv6Address) {
/* According to RFC 2464, a Multicast MAC address is derived by concatenating 32 lower
order bits of IPv6 Multicast Address with the multicast prefix (i.e., 33:33).
}
public void installIcmpv6NsPuntFlow(short tableId, BigInteger dpId, Long elanTag, String ipv6Address,
- IMdsalApiManager mdsalUtil,int addOrRemove) {
+ int addOrRemove) {
List<MatchInfo> neighborSolicitationMatch = getIcmpv6NSMatch(elanTag, ipv6Address);
List<InstructionInfo> instructions = new ArrayList<>();
List<ActionInfo> actionsInfos = new ArrayList<>();
}
}
- public void installIcmpv6RsPuntFlow(short tableId, BigInteger dpId, Long elanTag, IMdsalApiManager mdsalUtil,
- int addOrRemove) {
+ public void installIcmpv6RsPuntFlow(short tableId, BigInteger dpId, Long elanTag, int addOrRemove) {
if (dpId == null || dpId.equals(Ipv6Constants.INVALID_DPID)) {
return;
}
.addAugmentation(StypeOpenflow.class, augBuilder.build()).build();
}
- private InstanceIdentifier buildServiceId(String interfaceName,
+ private InstanceIdentifier<BoundServices> buildServiceId(String interfaceName,
short priority) {
return InstanceIdentifier.builder(ServiceBindings.class).child(ServicesInfo.class,
new ServicesInfoKey(interfaceName, ServiceModeIngress.class))
.child(BoundServices.class, new BoundServicesKey(priority)).build();
}
- public void bindIpv6Service(DataBroker broker, String interfaceName, Long elanTag, short tableId) {
+ public void bindIpv6Service(String interfaceName, Long elanTag, short tableId) {
int instructionKey = 0;
List<Instruction> instructions = new ArrayList<>();
instructions.add(MDSALUtil.buildAndGetWriteMetadaInstruction(MetaDataUtil.getElanTagMetadata(elanTag),
when(ifMgrInstance.getRouterV6InterfaceForNetwork(any())).thenReturn(routerIntf);
List<Ipv6Address> ipv6AddrList = new ArrayList<>();
when(routerIntf.getMacAddress()).thenReturn("08:00:27:FE:8F:95");
- Ipv6ServiceUtils ipv6Utils = Ipv6ServiceUtils.getInstance();
- Ipv6Address llAddr = ipv6Utils.getIpv6LinkLocalAddressFromMac(new MacAddress("08:00:27:FE:8F:95"));
+ Ipv6Address llAddr = Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(new MacAddress("08:00:27:FE:8F:95"));
ipv6AddrList.add(llAddr);
when(routerIntf.getIpv6Addresses()).thenReturn(ipv6AddrList);
import static org.junit.Assert.assertEquals;
-import org.junit.Before;
import org.junit.Test;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
* Unit test fort {@link Ipv6ServiceUtilsTest}.
*/
public class Ipv6ServiceUtilsTest {
- private Ipv6ServiceUtils instance;
private static String IPv6_ADDR_1 = "fe80:0:0:0:f816:3eff:fe4e:180c";
private static String IPv6_ADDR_2 = "fe80:0:0:0:f816:3eff:fe4e:18c0";
private static String IPv6_ADDR_3 = "fe80:0:0:0:816:3ff:fe04:80c";
private static String IPv6_ADDR_4 = "fe80:0:0:0:f600:ff:fe0f:6b";
private static String IPv6_ADDR_5 = "fe80:0:0:0:527b:9dff:fe78:54f3";
- @Before
- public void initTest() {
- instance = Ipv6ServiceUtils.getInstance();
- }
-
/**
* Test getIpv6LinkLocalAddressFromMac with different MACAddress values.
*/
public void testgetIpv6LinkLocalAddressFromMac() {
MacAddress mac = new MacAddress("fa:16:3e:4e:18:0c");
Ipv6Address expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_1);
- assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+ assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
mac = new MacAddress("fa:16:3e:4e:18:c0");
expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_2);
- assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+ assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
mac = new MacAddress("0a:16:03:04:08:0c");
expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_3);
- assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+ assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
mac = new MacAddress("f4:00:00:0f:00:6b");
expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_4);
- assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+ assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
mac = new MacAddress("50:7B:9D:78:54:F3");
expectedLinkLocalAddress = new Ipv6Address(IPv6_ADDR_5);
- assertEquals(expectedLinkLocalAddress, instance.getIpv6LinkLocalAddressFromMac(mac));
+ assertEquals(expectedLinkLocalAddress, Ipv6ServiceUtils.getIpv6LinkLocalAddressFromMac(mac));
}
/**
public void testgetIpv6SolicitedNodeMcastAddress() {
Ipv6Address ipv6Address = new Ipv6Address(IPv6_ADDR_1);
Ipv6Address expectedSolicitedNodeAddr = new Ipv6Address("ff02:0:0:0:0:1:ff4e:180c");
- assertEquals(expectedSolicitedNodeAddr, instance.getIpv6SolicitedNodeMcastAddress(ipv6Address));
+ assertEquals(expectedSolicitedNodeAddr, Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(ipv6Address));
ipv6Address = new Ipv6Address(IPv6_ADDR_2);
expectedSolicitedNodeAddr = new Ipv6Address("ff02:0:0:0:0:1:ff4e:18c0");
- assertEquals(expectedSolicitedNodeAddr, instance.getIpv6SolicitedNodeMcastAddress(ipv6Address));
+ assertEquals(expectedSolicitedNodeAddr, Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(ipv6Address));
ipv6Address = new Ipv6Address(IPv6_ADDR_4);
expectedSolicitedNodeAddr = new Ipv6Address("ff02:0:0:0:0:1:ff0f:6b");
- assertEquals(expectedSolicitedNodeAddr, instance.getIpv6SolicitedNodeMcastAddress(ipv6Address));
+ assertEquals(expectedSolicitedNodeAddr, Ipv6ServiceUtils.getIpv6SolicitedNodeMcastAddress(ipv6Address));
}
/**
public void testgetIpv6MulticastMacAddress() {
Ipv6Address ipv6Address = new Ipv6Address(IPv6_ADDR_1);
MacAddress expectedMacAddress = new MacAddress("33:33:fe:4e:18:0c");
- assertEquals(expectedMacAddress, instance.getIpv6MulticastMacAddress(ipv6Address));
+ assertEquals(expectedMacAddress, Ipv6ServiceUtils.getIpv6MulticastMacAddress(ipv6Address));
ipv6Address = new Ipv6Address(IPv6_ADDR_2);
expectedMacAddress = new MacAddress("33:33:fe:4e:18:c0");
- assertEquals(expectedMacAddress, instance.getIpv6MulticastMacAddress(ipv6Address));
+ assertEquals(expectedMacAddress, Ipv6ServiceUtils.getIpv6MulticastMacAddress(ipv6Address));
ipv6Address = new Ipv6Address(IPv6_ADDR_4);
expectedMacAddress = new MacAddress("33:33:fe:0f:00:6b");
- assertEquals(expectedMacAddress, instance.getIpv6MulticastMacAddress(ipv6Address));
+ assertEquals(expectedMacAddress, Ipv6ServiceUtils.getIpv6MulticastMacAddress(ipv6Address));
}
}