summaryrefslogtreecommitdiffstats
path: root/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function
diff options
context:
space:
mode:
Diffstat (limited to 'srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function')
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBindingRegistry.java29
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBinder.java59
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistry.java36
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistryProvider.java56
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBinder.java (renamed from srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBinder.java)18
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistry.java2
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistryProvider.java16
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT4FunctionBinder.java19
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT6FunctionBinder.java19
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndTFunctionBinder.java23
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/TableLookupFunctionBinder.java26
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/nofunction/EndFunctionBinder.java18
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java19
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java34
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java34
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java38
-rw-r--r--srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java33
17 files changed, 403 insertions, 76 deletions
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBindingRegistry.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBindingRegistry.java
index d56656fb9..361f042a8 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBindingRegistry.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBindingRegistry.java
@@ -28,23 +28,40 @@ import org.slf4j.LoggerFactory;
abstract class LocalSidFunctionBindingRegistry<T extends LocalSidFunctionRequest> {
private static final Logger LOG = LoggerFactory.getLogger(LocalSidFunctionBindingRegistry.class);
- final List<LocalSidFunctionBinder<T>> binders;
+ final List<LocalSidFunctionWriteBinder<T>> wBinders;
+ final List<LocalSidFunctionReadBinder> rBinders;
+
LocalSidFunctionBindingRegistry() {
- binders = new ArrayList<>();
+ wBinders = new ArrayList<>();
+ rBinders = new ArrayList<>();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void registerWriteFunctionType(@Nonnull final LocalSidFunctionWriteBinder binder) {
+ checkNotNull(binder, "Cannot register null binder");
+ if (!isFunctionRegistered(binder)) {
+ wBinders.add(binder);
+ } else {
+ LOG.warn("Binder for class already registered. Canceling registration for {}.", binder);
+ }
+ }
+
+ private boolean isFunctionRegistered(@Nonnull final LocalSidFunctionWriteBinder binder) {
+ return wBinders.stream().parallel().anyMatch(locBinder -> locBinder.getClass().equals(binder.getClass()));
}
@SuppressWarnings("unchecked")
- public void registerFunctionType(@Nonnull final LocalSidFunctionBinder binder) {
+ public void registerReadFunctionType(@Nonnull final LocalSidFunctionReadBinder binder) {
checkNotNull(binder, "Cannot register null binder");
if (!isFunctionRegistered(binder)) {
- binders.add(binder);
+ rBinders.add(binder);
} else {
LOG.warn("Binder for class already registered. Canceling registration for {}.", binder);
}
}
- private boolean isFunctionRegistered(@Nonnull final LocalSidFunctionBinder binder) {
- return binders.stream().parallel().anyMatch(locBinder -> locBinder.getClass().equals(binder.getClass()));
+ private boolean isFunctionRegistered(@Nonnull final LocalSidFunctionReadBinder binder) {
+ return rBinders.stream().parallel().anyMatch(locBinder -> locBinder.getClass().equals(binder.getClass()));
}
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBinder.java
new file mode 100644
index 000000000..ab624fbf7
--- /dev/null
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBinder.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.hc2vpp.srv6.util.function;
+
+import io.fd.honeycomb.translate.read.ReadContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
+
+/**
+ * Binder interface, which is used to map local sid function requests from VPP to yang model data classes of
+ * local sid functions. It uses behavior function type integer value defined by VPP API, to find
+ * suitable binder. This value is translated to {@link Srv6EndpointType} in model, which represents the same endpoint
+ * function as defined by VPP API.
+ */
+public interface LocalSidFunctionReadBinder {
+
+ /**
+ * Translate data read From VPP to data defined by model
+ *
+ * @param data local sid details read from VPP
+ * @param ctx read context that contains modification cache and mapping chache
+ * @param builder builder for setting data
+ */
+ void translateFromDump(@Nonnull final SrLocalsidsDetails data, @Nonnull final ReadContext ctx,
+ @Nonnull final SidBuilder builder);
+
+ /**
+ * Provide behavior function type integer value.
+ *
+ * @return integer value of behaviour function type as defined in VPP api
+ */
+ int getBehaviourFunctionType();
+
+ /**
+ * Checks whether this binder is able to process provided function from VPP
+ *
+ * @param functionCode integer value of behaviour function type as defined in VPP api
+ * @return true if endpoint function binder is able to process provided functionCode, false otherwise
+ */
+ default boolean canHandle(int functionCode) {
+ return getBehaviourFunctionType() == functionCode;
+ }
+}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistry.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistry.java
new file mode 100644
index 000000000..66586b9c2
--- /dev/null
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistry.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.hc2vpp.srv6.util.function;
+
+import io.fd.hc2vpp.srv6.write.sid.request.LocalSidFunctionRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
+import io.fd.honeycomb.translate.util.RWUtils;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+
+public class LocalSidFunctionReadBindingRegistry<T extends LocalSidFunctionRequest>
+ extends LocalSidFunctionBindingRegistry<T> {
+
+ public void bind(@Nonnull final SrLocalsidsDetails details, @Nonnull final ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ rBinders.parallelStream()
+ .filter(localSidFunctionBinder -> localSidFunctionBinder.canHandle(details.behavior))
+ .collect(RWUtils.singleItemCollector())
+ .translateFromDump(details, ctx, builder);
+ }
+}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistryProvider.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistryProvider.java
new file mode 100644
index 000000000..40e305371
--- /dev/null
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionReadBindingRegistryProvider.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.hc2vpp.srv6.util.function;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import io.fd.hc2vpp.common.translate.util.NamingContext;
+import io.fd.hc2vpp.srv6.util.function.lookup.EndDT4FunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.lookup.EndDT6FunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.lookup.EndTFunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.nofunction.EndFunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.xconnect.EndDX2FunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.xconnect.EndDX4FunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.xconnect.EndDX6FunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.xconnect.EndXFunctionBinder;
+import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import javax.inject.Named;
+
+public class LocalSidFunctionReadBindingRegistryProvider implements Provider<LocalSidFunctionReadBindingRegistry> {
+
+ @Inject
+ @Named("interface-context")
+ private NamingContext interfaceContext;
+
+ @Inject
+ private FutureJVppCore api;
+ private final LocalSidFunctionReadBindingRegistry registry = new LocalSidFunctionReadBindingRegistry();
+
+ @Override
+ public LocalSidFunctionReadBindingRegistry get() {
+ registry.registerReadFunctionType(new EndFunctionBinder(api));
+ registry.registerReadFunctionType(new EndTFunctionBinder(api));
+ registry.registerReadFunctionType(new EndDT4FunctionBinder(api));
+ registry.registerReadFunctionType(new EndDT6FunctionBinder(api));
+ registry.registerReadFunctionType(new EndXFunctionBinder(api, interfaceContext));
+ registry.registerReadFunctionType(new EndDX2FunctionBinder(api, interfaceContext));
+ registry.registerReadFunctionType(new EndDX4FunctionBinder(api, interfaceContext));
+ registry.registerReadFunctionType(new EndDX6FunctionBinder(api, interfaceContext));
+
+ return registry;
+ }
+}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBinder.java
index e51ee5ac5..30c875f4c 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBinder.java
@@ -24,14 +24,14 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.
/**
* Binder interface, which is used to map yang model data classes of local sid functions to local sid function requests
- * used to configure endpoint functions on VPP. It uses behavior function type integer value defined by VPP API, to find
- * suitable binder. This value is translated to {@link Srv6EndpointType} in model, which represents the same endpoint
- * function as defined by VPP API.
+ * used to configure endpoint functions on VPP. It uses {@link Srv6EndpointType} class value, to find suitable binder.
+ * This value is translated to behavior function type integer value defined by VPP API, which represents the same
+ * function as defined by the model.
*
* @param <T> Type which extends general interface for {@link LocalSidFunctionRequest} and represents template binder
* that is used to process end function data represented by provided class type.
*/
-public interface LocalSidFunctionBinder<T extends LocalSidFunctionRequest> {
+public interface LocalSidFunctionWriteBinder<T extends LocalSidFunctionRequest> {
/**
* Binds request accordingly to type of function implemented by this interface
@@ -43,20 +43,14 @@ public interface LocalSidFunctionBinder<T extends LocalSidFunctionRequest> {
/**
* Provides Endpoint function type class.
+ *
* @return Endpoint function class
*/
@Nonnull
Class<? extends Srv6EndpointType> getHandledFunctionType();
/**
- * Provide behavior function type integer value.
- *
- * @return integer value of behaviour function type as defined in VPP api
- */
- int getBehaviourFunctionType();
-
- /**
- * Checks whether binder can handle provided data
+ * Checks whether binder can handle provided Sid data from model
*
* @param data sid function data to be checked
* @return true if function binder is able to process provided data, false otherwise
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistry.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistry.java
index b74a7668b..8558fb9af 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistry.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistry.java
@@ -26,7 +26,7 @@ public class LocalSidFunctionWriteBindingRegistry<T extends LocalSidFunctionRequ
extends LocalSidFunctionBindingRegistry<T> {
public LocalSidFunctionRequest bind(final Sid localSid, @Nonnull final WriteContext ctx) {
- return binders.parallelStream()
+ return wBinders.parallelStream()
.filter(toLocalSidFunctionBinder -> toLocalSidFunctionBinder.canHandle(localSid))
.map(binder -> binder.createWriteRequestAndBind(localSid, ctx))
.collect(RWUtils.singleItemCollector());
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistryProvider.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistryProvider.java
index 20189b702..ead94c90f 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistryProvider.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/LocalSidFunctionWriteBindingRegistryProvider.java
@@ -42,14 +42,14 @@ public class LocalSidFunctionWriteBindingRegistryProvider implements Provider<Lo
@Override
public LocalSidFunctionWriteBindingRegistry get() {
- registry.registerFunctionType(new EndFunctionBinder(api));
- registry.registerFunctionType(new EndTFunctionBinder(api));
- registry.registerFunctionType(new EndDT4FunctionBinder(api));
- registry.registerFunctionType(new EndDT6FunctionBinder(api));
- registry.registerFunctionType(new EndXFunctionBinder(api, interfaceContext));
- registry.registerFunctionType(new EndDX2FunctionBinder(api, interfaceContext));
- registry.registerFunctionType(new EndDX4FunctionBinder(api, interfaceContext));
- registry.registerFunctionType(new EndDX6FunctionBinder(api, interfaceContext));
+ registry.registerWriteFunctionType(new EndFunctionBinder(api));
+ registry.registerWriteFunctionType(new EndTFunctionBinder(api));
+ registry.registerWriteFunctionType(new EndDT4FunctionBinder(api));
+ registry.registerWriteFunctionType(new EndDT6FunctionBinder(api));
+ registry.registerWriteFunctionType(new EndXFunctionBinder(api, interfaceContext));
+ registry.registerWriteFunctionType(new EndDX2FunctionBinder(api, interfaceContext));
+ registry.registerWriteFunctionType(new EndDX4FunctionBinder(api, interfaceContext));
+ registry.registerWriteFunctionType(new EndDX6FunctionBinder(api, interfaceContext));
return registry;
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT4FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT4FunctionBinder.java
index e8ea22419..67b739161 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT4FunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT4FunctionBinder.java
@@ -18,15 +18,22 @@ package io.fd.hc2vpp.srv6.util.function.lookup;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.srv6.write.sid.request.TableLookupLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDt4Builder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDT4;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.TableId;
public class EndDT4FunctionBinder extends TableLookupFunctionBinder {
+ private static final int END_DT4_FUNCTION_VALUE = 9;
+
public EndDT4FunctionBinder(@Nonnull final FutureJVppCore api) {
super(api);
}
@@ -42,8 +49,20 @@ public class EndDT4FunctionBinder extends TableLookupFunctionBinder {
}
@Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ builder.setEndDt4(new EndDt4Builder()
+ .setLookupTableIpv4(new TableId(Integer.toUnsignedLong(data.xconnectIfaceOrVrfTable))).build());
+ }
+
+ @Override
@Nonnull
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
return EndDT4.class;
}
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_DT4_FUNCTION_VALUE;
+ }
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT6FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT6FunctionBinder.java
index 01e6c6bb2..d9782a1af 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT6FunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndDT6FunctionBinder.java
@@ -18,15 +18,22 @@ package io.fd.hc2vpp.srv6.util.function.lookup;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.srv6.write.sid.request.TableLookupLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDt6Builder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDT6;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.TableId;
public class EndDT6FunctionBinder extends TableLookupFunctionBinder {
+ private static final int END_DT6_FUNCTION_VALUE = 8;
+
public EndDT6FunctionBinder(@Nonnull final FutureJVppCore api) {
super(api);
}
@@ -42,8 +49,20 @@ public class EndDT6FunctionBinder extends TableLookupFunctionBinder {
}
@Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ builder.setEndDt6(new EndDt6Builder()
+ .setLookupTableIpv6(new TableId(Integer.toUnsignedLong(data.xconnectIfaceOrVrfTable))).build());
+ }
+
+ @Override
@Nonnull
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
return EndDT6.class;
}
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_DT6_FUNCTION_VALUE;
+ }
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndTFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndTFunctionBinder.java
index 13a2d3bc7..cd9a37c48 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndTFunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/EndTFunctionBinder.java
@@ -18,14 +18,22 @@ package io.fd.hc2vpp.srv6.util.function.lookup;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.srv6.write.sid.request.TableLookupLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndTBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndT;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.TableId;
public class EndTFunctionBinder extends TableLookupFunctionBinder {
+ private static final int END_T_FUNCTION_VALUE = 3;
+
public EndTFunctionBinder(@Nonnull FutureJVppCore api) {
super(api);
}
@@ -40,8 +48,21 @@ public class EndTFunctionBinder extends TableLookupFunctionBinder {
}
@Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ builder.setEndT(
+ new EndTBuilder().setLookupTableIpv6(new TableId(Integer.toUnsignedLong(data.xconnectIfaceOrVrfTable)))
+ .build());
+ }
+
+ @Override
@Nonnull
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
- return org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndT.class;
+ return EndT.class;
+ }
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_T_FUNCTION_VALUE;
}
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/TableLookupFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/TableLookupFunctionBinder.java
index 8e6ab4f40..a775a78db 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/TableLookupFunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/lookup/TableLookupFunctionBinder.java
@@ -16,21 +16,14 @@
package io.fd.hc2vpp.srv6.util.function.lookup;
-import static com.google.common.base.Preconditions.checkState;
-
-import com.google.common.collect.ImmutableMap;
import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
import io.fd.hc2vpp.fib.management.FibManagementIIds;
-import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionReadBinder;
+import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionWriteBinder;
import io.fd.hc2vpp.srv6.write.sid.request.TableLookupLocalSidRequest;
import io.fd.honeycomb.translate.write.WriteContext;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import java.util.Map;
import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDT4;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDT6;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndT;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.AddressFamilyIdentity;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.Ipv4;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.Ipv6;
@@ -40,18 +33,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.
import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
abstract class TableLookupFunctionBinder extends FutureJVppCustomizer
- implements LocalSidFunctionBinder<TableLookupLocalSidRequest> {
-
- private static final Map<Class<? extends Srv6EndpointType>, Integer> REGISTER = ImmutableMap.of(
- EndT.class, 3,
- EndDT6.class, 8,
- EndDT4.class, 9
- );
+ implements LocalSidFunctionWriteBinder<TableLookupLocalSidRequest>, LocalSidFunctionReadBinder {
TableLookupFunctionBinder(@Nonnull final FutureJVppCore api) {
super(api);
- checkState(REGISTER.containsKey(getHandledFunctionType()),
- "Unsupported type of Local SID function %s", getHandledFunctionType());
}
TableLookupLocalSidRequest bindData(TableLookupLocalSidRequest request, int tableIndex, final boolean isIpv6,
@@ -68,9 +53,4 @@ abstract class TableLookupFunctionBinder extends FutureJVppCustomizer
request.setFunction(getBehaviourFunctionType());
return request;
}
-
- @Override
- public int getBehaviourFunctionType() {
- return REGISTER.get(getHandledFunctionType());
- }
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/nofunction/EndFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/nofunction/EndFunctionBinder.java
index a1952e3c4..4d7ad69fe 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/nofunction/EndFunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/nofunction/EndFunctionBinder.java
@@ -18,16 +18,22 @@ package io.fd.hc2vpp.srv6.util.function.nofunction;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
-import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionReadBinder;
+import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionWriteBinder;
import io.fd.hc2vpp.srv6.write.sid.request.NoProtocolLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.End;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
public class EndFunctionBinder extends FutureJVppCustomizer implements
- LocalSidFunctionBinder<NoProtocolLocalSidRequest> {
+ LocalSidFunctionWriteBinder<NoProtocolLocalSidRequest>, LocalSidFunctionReadBinder {
private static final int END_FUNCTION_VALUE = 1;
@@ -45,10 +51,16 @@ public class EndFunctionBinder extends FutureJVppCustomizer implements
return request;
}
+ @Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ builder.setEnd(new EndBuilder().build());
+ }
+
@Nonnull
@Override
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
- return org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.End.class;
+ return End.class;
}
@Override
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java
index 63de40b9c..551a211dd 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java
@@ -19,15 +19,22 @@ package io.fd.hc2vpp.srv6.util.function.xconnect;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.common.translate.util.NamingContext;
import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx2Builder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.end.dx2.PathsBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX2;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
public class EndDX2FunctionBinder extends XConnectFunctionBinder {
+ private static final int END_DX2_FUNCTION_VALUE = 5;
+
public EndDX2FunctionBinder(@Nonnull final FutureJVppCore api, @Nonnull final NamingContext interfaceContext) {
super(api, interfaceContext);
}
@@ -48,9 +55,21 @@ public class EndDX2FunctionBinder extends XConnectFunctionBinder {
return request;
}
+ @Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable);
+ builder.setEndDx2(new EndDx2Builder().setPaths(new PathsBuilder().setInterface(interfaceName).build()).build());
+ }
+
@Nonnull
@Override
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
return EndDX2.class;
}
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_DX2_FUNCTION_VALUE;
+ }
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java
index 51abc9876..cb8dbfeb1 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java
@@ -19,18 +19,30 @@ package io.fd.hc2vpp.srv6.util.function.xconnect;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.common.translate.util.NamingContext;
import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import java.util.Collections;
import java.util.Optional;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v4.PathsBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v4.paths.Path;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v4.paths.PathBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx4;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx4Builder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.PathAttrsCmn;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX4;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
public class EndDX4FunctionBinder extends XConnectFunctionBinder {
+ private static final int END_DX4_FUNCTION_VALUE = 7;
+
public EndDX4FunctionBinder(@Nonnull FutureJVppCore api, @Nonnull NamingContext interfaceContext) {
super(api, interfaceContext);
}
@@ -52,9 +64,31 @@ public class EndDX4FunctionBinder extends XConnectFunctionBinder {
return request;
}
+ @Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ Ipv4AddressNoZone ipv4AddressNoZone = arrayToIpv4AddressNoZone(data.xconnectNhAddr4);
+ String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable);
+ EndDx4 endDx4 = new EndDx4Builder().setPaths(new PathsBuilder().setPath(Collections.singletonList(
+ // TODO(HC2VPP-335): currently vpp allows to configure only one next hop
+ // therefore setting path index, role and weight to constants
+ new PathBuilder().setNextHop(ipv4AddressNoZone)
+ .setInterface(interfaceName)
+ .setPathIndex(DEFAULT_PATH_INDEX)
+ .setWeight(DEFAULT_WEIGHT)
+ .setRole(PathAttrsCmn.Role.PRIMARY)
+ .build())).build()).build();
+ builder.setEndDx4(endDx4);
+ }
+
@Nonnull
@Override
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
return EndDX4.class;
}
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_DX4_FUNCTION_VALUE;
+ }
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java
index 71194fbd4..3c1218005 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java
@@ -19,18 +19,30 @@ package io.fd.hc2vpp.srv6.util.function.xconnect;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.common.translate.util.NamingContext;
import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import java.util.Collections;
import java.util.Optional;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.PathsBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.Path;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.PathBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx6;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx6Builder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.PathAttrsCmn;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX6;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
public class EndDX6FunctionBinder extends XConnectFunctionBinder {
+ private static final int END_DX6_FUNCTION_VALUE = 6;
+
public EndDX6FunctionBinder(@Nonnull FutureJVppCore api, @Nonnull NamingContext interfaceContext) {
super(api, interfaceContext);
}
@@ -52,9 +64,31 @@ public class EndDX6FunctionBinder extends XConnectFunctionBinder {
return request;
}
+ @Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ Ipv6AddressNoZone ipv6AddressNoZone = arrayToIpv6AddressNoZone(data.xconnectNhAddr6);
+ String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable);
+ EndDx6 endDx6 = new EndDx6Builder().setPaths(new PathsBuilder().setPath(Collections.singletonList(
+ // TODO(HC2VPP-335): currently vpp allows to configure only one next hop
+ // therefore setting path index, role and weight to constants
+ new PathBuilder().setNextHop(ipv6AddressNoZone)
+ .setInterface(interfaceName)
+ .setPathIndex(DEFAULT_PATH_INDEX)
+ .setWeight(DEFAULT_WEIGHT)
+ .setRole(PathAttrsCmn.Role.PRIMARY)
+ .build())).build()).build();
+ builder.setEndDx6(endDx6);
+ }
+
@Nonnull
@Override
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
return EndDX6.class;
}
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_DX6_FUNCTION_VALUE;
+ }
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java
index 0b3af395c..e153bd5f8 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java
@@ -19,17 +19,29 @@ package io.fd.hc2vpp.srv6.util.function.xconnect;
import com.google.common.base.Preconditions;
import io.fd.hc2vpp.common.translate.util.NamingContext;
import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest;
+import io.fd.honeycomb.translate.read.ReadContext;
import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import java.util.Collections;
import java.util.Optional;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.PathsBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.Path;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.PathBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndXBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.PathAttrsCmn;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndX;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
public class EndXFunctionBinder extends XConnectFunctionBinder {
+ private static final int END_X_FUNCTION_VALUE = 2;
+
public EndXFunctionBinder(@Nonnull FutureJVppCore api, @Nonnull NamingContext interfaceContext) {
super(api, interfaceContext);
}
@@ -53,9 +65,33 @@ public class EndXFunctionBinder extends XConnectFunctionBinder {
return request;
}
+ @Override
+ public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx,
+ @Nonnull final SidBuilder builder) {
+ Ipv6AddressNoZone ipv6AddressNoZone = arrayToIpv6AddressNoZone(data.xconnectNhAddr6);
+ String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable);
+ EndXBuilder endX = new EndXBuilder()
+ // TODO(HC2VPP-335): currently vpp allows to configure only one next hop
+ // therefore setting path index, role and weight to constants
+ .setPaths(new PathsBuilder().setPath(Collections.singletonList(
+ new PathBuilder()
+ .setNextHop(ipv6AddressNoZone)
+ .setInterface(interfaceName)
+ .setPathIndex(DEFAULT_PATH_INDEX)
+ .setWeight(DEFAULT_WEIGHT)
+ .setRole(PathAttrsCmn.Role.PRIMARY)
+ .build())).build());
+ builder.setEndX(endX.build());
+ }
+
@Nonnull
@Override
public Class<? extends Srv6EndpointType> getHandledFunctionType() {
- return org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndX.class;
+ return EndX.class;
+ }
+
+ @Override
+ public int getBehaviourFunctionType() {
+ return END_X_FUNCTION_VALUE;
}
}
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java
index 9f69c9041..eef5d9622 100644
--- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java
+++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java
@@ -16,46 +16,37 @@
package io.fd.hc2vpp.srv6.util.function.xconnect;
-import static com.google.common.base.Preconditions.checkState;
import static java.lang.String.format;
-import com.google.common.collect.ImmutableMap;
import io.fd.hc2vpp.common.translate.util.AddressTranslator;
import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
import io.fd.hc2vpp.common.translate.util.NamingContext;
-import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionBinder;
+import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionReadBinder;
+import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionWriteBinder;
import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest;
import io.fd.honeycomb.translate.MappingContext;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import java.util.Map;
import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX2;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX4;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX6;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndX;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType;
abstract class XConnectFunctionBinder extends FutureJVppCustomizer
- implements LocalSidFunctionBinder<XConnectLocalSidRequest>, AddressTranslator {
-
- private static final Map<Class<? extends Srv6EndpointType>, Integer>
- REGISTER = ImmutableMap.of(EndX.class, 2,
- EndDX2.class, 5,
- EndDX4.class, 7,
- EndDX6.class, 6);
+ implements LocalSidFunctionWriteBinder<XConnectLocalSidRequest>, LocalSidFunctionReadBinder, AddressTranslator {
private final NamingContext interfaceContext;
+ static final long DEFAULT_WEIGHT = 1L;
+ static final short DEFAULT_PATH_INDEX = 1;
XConnectFunctionBinder(@Nonnull final FutureJVppCore api, @Nonnull final NamingContext interfaceContext) {
super(api);
this.interfaceContext = interfaceContext;
- checkState(REGISTER.containsKey(getHandledFunctionType()), "Unsupported type of Local SID function %s",
- getHandledFunctionType());
}
- @Override
- public int getBehaviourFunctionType() {
- return REGISTER.get(getHandledFunctionType());
+ String getInterfaceName(final MappingContext ctx, final int index) {
+ return interfaceContext.getName(index, ctx);
+ }
+
+ protected int getVLanIndex(final MappingContext ctx, final String name) {
+ return interfaceContext.getIndex(name, ctx, () -> new IllegalArgumentException(
+ format("VLan with name %s not found", name)));
}
int getInterfaceIndex(final MappingContext ctx, final String name) {