summaryrefslogtreecommitdiffstats
path: root/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java')
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java196
1 files changed, 175 insertions, 21 deletions
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java
index 0b5cef4d8..faaf06306 100644
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java
+++ b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/initializers/InterfacesInitializer.java
@@ -16,11 +16,9 @@
package io.fd.honeycomb.v3po.translate.v3po.initializers;
-import com.google.common.base.Function;
import com.google.common.collect.Lists;
import io.fd.honeycomb.v3po.vpp.data.init.AbstractDataTreeConverter;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesBuilder;
@@ -29,6 +27,29 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.AdminStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceStateAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanVni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.EthernetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.SubInterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.TapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUserBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VxlanBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.l2.VlanTagRewriteBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.l2.interconnection.BridgeBasedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.l2.interconnection.XconnectBasedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Ethernet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.L2;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.SubInterface;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Tap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VhostUser;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Vxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.l2.Interconnection;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.l2.VlanTagRewrite;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.l2.interconnection.BridgeBased;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.l2.interconnection.XconnectBased;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,26 +69,159 @@ public class InterfacesInitializer extends AbstractDataTreeConverter<InterfacesS
protected Interfaces convert(final InterfacesState operationalData) {
LOG.debug("InterfacesInitializer.convert()");
InterfacesBuilder interfacesBuilder = new InterfacesBuilder();
- interfacesBuilder.setInterface(Lists.transform(operationalData.getInterface(), CONVERT_INTERFACE));
+ interfacesBuilder
+ .setInterface(Lists.transform(operationalData.getInterface(), InterfacesInitializer::initialize));
return interfacesBuilder.build();
}
- private static final Function<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface, Interface>
- CONVERT_INTERFACE =
- new Function<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface, Interface>() {
- @Nullable
- @Override
- public Interface apply(
- @Nullable final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface input) {
-
- InterfaceBuilder builder = new InterfaceBuilder();
- builder.setKey(new InterfaceKey(input.getKey().getName()));
- builder.setName(input.getName());
- // builder.setDescription(); not present in interfaces-state
- builder.setType(input.getType());
- builder.setEnabled(AdminStatus.Up.equals(input.getAdminStatus()));
- // builder.setLinkUpDownTrapEnable(); not present in interfaces-state
- return builder.build();
- }
- };
+ // FIXME this kind of initialization/transformation is bad
+ // There is no relation to readers, it cannot be extended (readers can) and its hard to keep in sync with readers
+
+ // TODO add IP v4/ v6 initializer
+
+ private static Interface initialize(
+ final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface input) {
+ InterfaceBuilder builder = new InterfaceBuilder();
+ builder.setKey(new InterfaceKey(input.getKey().getName()));
+ builder.setName(input.getName());
+ builder.setType(input.getType());
+ builder.setEnabled(AdminStatus.Up.equals(input.getAdminStatus()));
+ // builder.setLinkUpDownTrapEnable(); not present in interfaces-state
+
+ final VppInterfaceStateAugmentation vppIfcAugmentation =
+ input.getAugmentation(VppInterfaceStateAugmentation.class);
+ if(vppIfcAugmentation != null) {
+ final VppInterfaceAugmentationBuilder augmentBuilder = new VppInterfaceAugmentationBuilder();
+ builder.setDescription(vppIfcAugmentation.getDescription());
+
+ final Vxlan vxlan = vppIfcAugmentation.getVxlan();
+ if(vxlan != null) {
+ setVxlan(augmentBuilder, vxlan);
+ }
+
+ final Tap tap = vppIfcAugmentation.getTap();
+ if(tap != null) {
+ setTap(input, augmentBuilder, tap);
+ }
+
+ final VhostUser vhostUser = vppIfcAugmentation.getVhostUser();
+ if(vhostUser != null) {
+ setVhostUser(augmentBuilder, vhostUser);
+ }
+
+ final L2 l2 = vppIfcAugmentation.getL2();
+ if(l2 != null) {
+ setL2(augmentBuilder, l2);
+ }
+
+ final SubInterface subInterface = vppIfcAugmentation.getSubInterface();
+ if(subInterface != null) {
+ setSubinterface(augmentBuilder, subInterface);
+ }
+
+ final Ethernet ethernet = vppIfcAugmentation.getEthernet();
+ if(ethernet != null) {
+ setEthernet(augmentBuilder, ethernet);
+ }
+
+ // TODO set routing, not present in interface-state
+
+ builder.addAugmentation(VppInterfaceAugmentation.class, augmentBuilder.build());
+ }
+
+ return builder.build();
+ }
+
+ private static void setSubinterface(final VppInterfaceAugmentationBuilder augmentBuilder,
+ final SubInterface subInterface) {
+ final SubInterfaceBuilder subIfcBuilder = new SubInterfaceBuilder();
+
+ if(subInterface.isDefaultSubif() != null) {
+ subIfcBuilder.setDefaultSubif(subInterface.isDefaultSubif());
+ }
+ if(subInterface.isExactMatch() != null) {
+ subIfcBuilder.setExactMatch(subInterface.isExactMatch());
+ }
+ if(subInterface.isMatchAnyInnerId() != null) {
+ subIfcBuilder.setMatchAnyInnerId(subInterface.isMatchAnyInnerId());
+ }
+ if(subInterface.isMatchAnyOuterId() != null) {
+ subIfcBuilder.setMatchAnyOuterId(subInterface.isMatchAnyOuterId());
+ }
+
+ subIfcBuilder.setIdentifier(subInterface.getIdentifier());
+ subIfcBuilder.setInnerId(subInterface.getInnerId());
+ subIfcBuilder.setNumberOfTags(subInterface.getNumberOfTags());
+ subIfcBuilder.setOuterId(subInterface.getOuterId());
+ subIfcBuilder.setSuperInterface(subInterface.getSuperInterface());
+ subIfcBuilder.setVlanType(subInterface.getVlanType());
+
+ augmentBuilder.setSubInterface(subIfcBuilder.build());
+ }
+
+ private static void setEthernet(final VppInterfaceAugmentationBuilder augmentBuilder, final Ethernet ethernet) {
+ final EthernetBuilder ethernetBuilder = new EthernetBuilder();
+ ethernetBuilder.setMtu(ethernet.getMtu());
+ augmentBuilder.setEthernet(ethernetBuilder.build());
+ }
+
+ private static void setL2(final VppInterfaceAugmentationBuilder augmentBuilder, final L2 l2) {
+ final L2Builder l2Builder = new L2Builder();
+
+ final Interconnection interconnection = l2.getInterconnection();
+ if(interconnection != null) {
+ if (interconnection instanceof XconnectBased) {
+ final XconnectBasedBuilder xconnectBasedBuilder = new XconnectBasedBuilder();
+ xconnectBasedBuilder.setXconnectOutgoingInterface(
+ ((XconnectBased) interconnection).getXconnectOutgoingInterface());
+ l2Builder.setInterconnection(xconnectBasedBuilder.build());
+ } else if (interconnection instanceof BridgeBased) {
+ final BridgeBasedBuilder bridgeBasedBuilder = new BridgeBasedBuilder();
+ bridgeBasedBuilder.setBridgeDomain(((BridgeBased) interconnection).getBridgeDomain());
+ bridgeBasedBuilder
+ .setBridgedVirtualInterface(((BridgeBased) interconnection).isBridgedVirtualInterface());
+ bridgeBasedBuilder.setSplitHorizonGroup(((BridgeBased) interconnection).getSplitHorizonGroup());
+ l2Builder.setInterconnection(bridgeBasedBuilder.build());
+ }
+ }
+
+ final VlanTagRewrite vlanTagRewrite = l2.getVlanTagRewrite();
+ if(vlanTagRewrite != null) {
+ final VlanTagRewriteBuilder vlanTagRewriteBuilder = new VlanTagRewriteBuilder();
+ vlanTagRewriteBuilder.setFirstPushed(vlanTagRewrite.getFirstPushed());
+ vlanTagRewriteBuilder.setRewriteOperation(vlanTagRewrite.getRewriteOperation());
+ vlanTagRewriteBuilder.setTag1(vlanTagRewrite.getTag1());
+ vlanTagRewriteBuilder.setTag2(vlanTagRewrite.getTag2());
+ l2Builder.setVlanTagRewrite(vlanTagRewriteBuilder.build());
+ }
+
+ augmentBuilder.setL2(l2Builder.build());
+ }
+
+ private static void setVhostUser(final VppInterfaceAugmentationBuilder augmentBuilder, final VhostUser vhostUser) {
+ final VhostUserBuilder vhostUserBuilder = new VhostUserBuilder();
+ vhostUserBuilder.setRole(vhostUser.getRole());
+ vhostUserBuilder.setSocket(vhostUser.getSocket());
+ augmentBuilder.setVhostUser(vhostUserBuilder.build());
+ }
+
+ private static void setTap(
+ final @Nonnull org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface input,
+ final VppInterfaceAugmentationBuilder augmentBuilder,
+ final Tap tap) {
+ final TapBuilder tapBuilder = new TapBuilder();
+ tapBuilder.setMac(input.getPhysAddress());
+ tapBuilder.setTapName(tap.getTapName());
+// tapBuilder.setDeviceInstance();
+ augmentBuilder.setTap(tapBuilder.build());
+ }
+
+ private static void setVxlan(final VppInterfaceAugmentationBuilder augmentBuilder, final Vxlan vxlan) {
+ final VxlanBuilder vxlanBuilder = new VxlanBuilder();
+ vxlanBuilder.setDst(vxlan.getDst());
+ vxlanBuilder.setSrc(vxlan.getSrc());
+ vxlanBuilder.setEncapVrfId(vxlan.getEncapVrfId());
+ vxlanBuilder.setVni(new VxlanVni(vxlan.getVni()));
+ augmentBuilder.setVxlan(vxlanBuilder.build());
+ }
}