import static org.opendaylight.netvirt.dhcpservice.api.DHCPConstants.MAGIC_COOKIE;
import static org.opendaylight.netvirt.dhcpservice.api.DHCPConstants.OPT_MESSAGE_TYPE;
+import com.google.common.collect.ImmutableMap;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
private static final String OPTIONS = "Options";
private DHCPOptions dhcpOptions = null;
- private static Map<String, Pair<Integer, Integer>> fieldCoordinates =
- new LinkedHashMap<String, Pair<Integer, Integer>>() {
- private static final long serialVersionUID = 1L;
- {
- put(OP, new ImmutablePair<>(0, 8));
- put(HTYPE, new ImmutablePair<>(8, 8));
- put(HLEN, new ImmutablePair<>(16, 8));
- put(HOPS, new ImmutablePair<>(24, 8));
- put(XID, new ImmutablePair<>(32, 32));
- put(SECS, new ImmutablePair<>(64, 16));
- put(FLAGS, new ImmutablePair<>(80, 16));
- put(CIADDR, new ImmutablePair<>(96, 32));
- put(YIADDR, new ImmutablePair<>(128, 32));
- put(SIADDR, new ImmutablePair<>(160, 32));
- put(GIADDR, new ImmutablePair<>(192, 32));
- put(CHADDR, new ImmutablePair<>(224, 128));
- put(SNAME, new ImmutablePair<>(352, 512));
- put(FILE, new ImmutablePair<>(864, 1024));
- put(MCOOKIE, new ImmutablePair<>(1888, 32));
- put(OPTIONS, new ImmutablePair<>(1920, 0));
- }
- };
+ private static final ImmutableMap<String, Pair<Integer, Integer>> FIELD_COORDINATES =
+ ImmutableMap.<String, Pair<Integer, Integer>>builderWithExpectedSize(16)
+ .put(OP, new ImmutablePair<>(0, 8))
+ .put(HTYPE, new ImmutablePair<>(8, 8))
+ .put(HLEN, new ImmutablePair<>(16, 8))
+ .put(HOPS, new ImmutablePair<>(24, 8))
+ .put(XID, new ImmutablePair<>(32, 32))
+ .put(SECS, new ImmutablePair<>(64, 16))
+ .put(FLAGS, new ImmutablePair<>(80, 16))
+ .put(CIADDR, new ImmutablePair<>(96, 32))
+ .put(YIADDR, new ImmutablePair<>(128, 32))
+ .put(SIADDR, new ImmutablePair<>(160, 32))
+ .put(GIADDR, new ImmutablePair<>(192, 32))
+ .put(CHADDR, new ImmutablePair<>(224, 128))
+ .put(SNAME, new ImmutablePair<>(352, 512))
+ .put(FILE, new ImmutablePair<>(864, 1024))
+ .put(MCOOKIE, new ImmutablePair<>(1888, 32))
+ .put(OPTIONS, new ImmutablePair<>(1920, 0))
+ .build();
private final Map<String, byte[]> fieldValues;
public DHCP(boolean writeAccess) {
super(writeAccess);
fieldValues = new HashMap<>();
- hdrFieldCoordMap = fieldCoordinates;
+ hdrFieldCoordMap = FIELD_COORDINATES;
hdrFieldsMap = fieldValues;
corrupted = false;
this.dhcpOptions = new DHCPOptions();
}
- //Getters
- public byte getOp() {
- return (BitBufferHelper.getByte(fieldValues.get(OP)));
- }
-
public byte getHtype() {
return (BitBufferHelper.getByte(fieldValues.get(HTYPE)));
}
return (BitBufferHelper.getByte(fieldValues.get(HLEN)));
}
- public byte getHops() {
- return (BitBufferHelper.getByte(fieldValues.get(HOPS)));
- }
-
public int getXid() {
return (BitBufferHelper.getInt(fieldValues.get(XID)));
}
- public short getSecs() {
- return (BitBufferHelper.getShort(fieldValues.get(SECS)));
- }
-
public short getFlags() {
return (BitBufferHelper.getShort(fieldValues.get(FLAGS)));
}
return fieldValues.get(CIADDR);
}
- public byte[] getYiaddr() {
- return fieldValues.get(YIADDR);
- }
-
-
- public byte[] getSiaddr() {
- return fieldValues.get(SIADDR);
- }
-
- public InetAddress getSiaddrAsInetAddr() {
- return DHCPUtils.byteArrayToInetAddr(fieldValues.get(SIADDR));
- }
public byte[] getGiaddr() {
return fieldValues.get(GIADDR);
return fieldValues.get(CHADDR);
}
- public byte[] getSname() {
- return fieldValues.get(SNAME);
- }
-
- public byte[] getFile() {
- return fieldValues.get(FILE);
- }
-
- public int getMCookie() {
- return (BitBufferHelper.getInt(fieldValues.get(MCOOKIE)));
- }
-
public byte[] getOptions() {
return fieldValues.get(OPTIONS);
}
return this;
}
- public DHCP setCiaddr(InetAddress dhcpCiaddr) {
- byte[] ciaddr = dhcpCiaddr.getAddress();
- fieldValues.put(CIADDR, ciaddr);
- return this;
- }
-
- public DHCP setCiaddr(String dhcpCiaddr) {
- byte[] ciaddr = NetUtils.parseInetAddress(dhcpCiaddr).getAddress();
- fieldValues.put(CIADDR, ciaddr);
- return this;
- }
-
- public DHCP setYiaddr(byte[] yiaddr) {
- fieldValues.put(YIADDR, yiaddr);
- return this;
- }
-
public DHCP setYiaddr(int dhcpYiaddr) {
byte[] yiaddr = BitBufferHelper.toByteArray(dhcpYiaddr);
fieldValues.put(YIADDR, yiaddr);
return this;
}
- public DHCP setYiaddr(InetAddress dhcpYiaddr) {
- byte[] yiaddr = dhcpYiaddr.getAddress();
- fieldValues.put(YIADDR, yiaddr);
- return this;
- }
-
public DHCP setYiaddr(String dhcpYiaddr) {
byte[] yiaddr = NetUtils.parseInetAddress(dhcpYiaddr).getAddress();
fieldValues.put(YIADDR, yiaddr);
return this;
}
- public DHCP setSiaddr(byte[] siaddr) {
- fieldValues.put(SIADDR, siaddr);
- return this;
- }
-
public DHCP setSiaddr(int dhcpSiaddr) {
byte[] siaddr = BitBufferHelper.toByteArray(dhcpSiaddr);
fieldValues.put(SIADDR, siaddr);
return this;
}
- public DHCP setSiaddr(InetAddress dhcpSiaddr) {
- byte[] siaddr = dhcpSiaddr.getAddress();
- fieldValues.put(SIADDR, siaddr);
- return this;
- }
-
public DHCP setSiaddr(String dhcpSiaddr) {
byte[] siaddr = NetUtils.parseInetAddress(dhcpSiaddr).getAddress();
fieldValues.put(SIADDR, siaddr);
return this;
}
- public DHCP setGiaddr(InetAddress dhcpGiaddr) {
- byte[] giaddr = dhcpGiaddr.getAddress();
- fieldValues.put(GIADDR, giaddr);
- return this;
- }
-
- public DHCP setGiaddr(String dhcpGiaddr) {
- byte[] giaddr = NetUtils.parseInetAddress(dhcpGiaddr).getAddress();
- fieldValues.put(GIADDR, giaddr);
- return this;
- }
-
public DHCP setChaddr(byte[] chaddr) {
fieldValues.put(CHADDR, chaddr);
return this;
return dhcpOptions.getOptionByte(OPT_MESSAGE_TYPE);
}
- public void setOptionByte(byte code, byte opt) {
- dhcpOptions.setOptionByte(code, opt);
- }
-
- public byte getOptionByte(byte code) {
- return dhcpOptions.getOptionByte(code);
- }
-
public void setOptionBytes(byte code, byte[] opt) {
dhcpOptions.setOption(code, opt);
}
return dhcpOptions.getOptionBytes(code);
}
- public void setOptionShort(byte code, short opt) {
- dhcpOptions.setOptionShort(code, opt);
- }
-
- public short getOptionShort(byte code) {
- return dhcpOptions.getOptionShort(code);
- }
-
public void setOptionInt(byte code, int opt) {
dhcpOptions.setOptionInt(code, opt);
}
- public int getOptionInt(byte code) {
- return dhcpOptions.getOptionInt(code);
- }
-
public InetAddress getOptionInetAddr(byte code) {
return dhcpOptions.getOptionInetAddr(code);
}
- public void setOptionInetAddr(byte code, InetAddress addr) {
- dhcpOptions.setOptionInetAddr(code, addr);
- }
-
public void setOptionInetAddr(byte code, String addr) throws UnknownHostException {
dhcpOptions.setOptionStrAddr(code, addr);
}
- public String getOptionStrAddr(byte code) {
- return dhcpOptions.getOptionStrAddr(code);
- }
-
public void setOptionStrAddrs(byte code, List<String> opt) throws UnknownHostException {
dhcpOptions.setOptionStrAddrs(code, opt);
}
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
-import java.util.stream.IntStream;
import java.util.stream.LongStream;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets;
InstanceIdentifier.builder(Nodes.class).build()));
}
- @Nonnull
- public static List<BigInteger> getListOfDpns(ReadTransaction tx) throws ReadFailedException {
- if (!connectedDpnIds.isEmpty()) {
- return connectedDpnIds;
- }
- return extractDpnsFromNodes(tx.read(LogicalDatastoreType.OPERATIONAL,
- InstanceIdentifier.builder(Nodes.class).build()).checkedGet());
- }
-
@Nonnull
private static List<BigInteger> extractDpnsFromNodes(Optional<Nodes> optionalNodes) {
return optionalNodes.toJavaUtil().map(
return segmentationId;
}
- public static String getNodeIdFromDpnId(BigInteger dpnId) {
- return MDSALUtil.NODE_PREFIX + MDSALUtil.SEPARATOR + dpnId.toString();
- }
-
- @Nullable
- public static String getTrunkPortMacAddress(String parentRefName,
- DataBroker broker) {
- InstanceIdentifier<Port> portInstanceIdentifier =
- InstanceIdentifier.create(Neutron.class).child(Ports.class).child(Port.class);
- Optional<Port> trunkPort = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION, portInstanceIdentifier);
- if (!trunkPort.isPresent()) {
- LOG.warn("Trunk port {} not available for sub-port", parentRefName);
- return null;
- }
- return trunkPort.get().getMacAddress().getValue();
- }
-
public static String getJobKey(String interfaceName) {
return new StringBuilder().append(DhcpMConstants.DHCP_JOB_KEY_PREFIX).append(interfaceName).toString();
}
return java.util.Optional.empty();
}
- static IpAddress convertIntToIp(int ipn) {
- String[] array = IntStream.of(24, 16, 8, 0) //
- .map(x -> ipn >> x & 0xFF).boxed() //
- .map(String::valueOf) //
- .toArray(String[]::new);
- return IpAddressBuilder.getDefaultInstance(String.join(".", array));
- }
-
static IpAddress convertLongToIp(long ip) {
String[] array = LongStream.of(24, 16, 8, 0) //
.map(x -> ip >> x & 0xFF).boxed() //
return interfaceManager.getInterfaceInfoFromOperationalDataStore(interfaceName);
}
- static BigInteger getDpIdFromInterface(IInterfaceManager interfaceManager, String interfaceName) {
- return interfaceManager.getDpnForInterface(interfaceName);
- }
-
public static java.util.Optional<String> getIpV4Address(Port port) {
if (port.getFixedIps() == null) {
return java.util.Optional.empty();