+ public static List<Action> getEgressActionsForInterface(String interfaceName, Long tunnelKey, DataBroker dataBroker) {
+ List<ActionInfo> listActionInfo = getEgressActionInfosForInterface(interfaceName, tunnelKey, 0, dataBroker);
+ List<Action> actionsList = new ArrayList<>();
+ for (ActionInfo actionInfo : listActionInfo) {
+ actionsList.add(actionInfo.buildAction());
+ }
+ return actionsList;
+ }
+
+ public static List<ActionInfo> getEgressActionInfosForInterface(String interfaceName,
+ int actionKeyStart,
+ DataBroker dataBroker) {
+ return getEgressActionInfosForInterface(interfaceName, null, actionKeyStart, dataBroker);
+ }
+
+ /**
+ * Returns a list of Actions to be taken when sending a packet over an interface
+ *
+ * @param interfaceName
+ * @param tunnelKey Optional.
+ * @param actionKeyStart
+ * @param dataBroker
+ * @return
+ */
+ public static List<ActionInfo> getEgressActionInfosForInterface(String interfaceName,
+ Long tunnelKey,
+ int actionKeyStart,
+ DataBroker dataBroker) {
+ List<ActionInfo> result = new ArrayList<ActionInfo>();
+ Interface interfaceInfo = InterfaceManagerCommonUtils.getInterfaceFromConfigDS(new InterfaceKey(interfaceName),
+ dataBroker);
+ String portNo = IfmUtil.getPortNoFromInterfaceName(interfaceName, dataBroker);
+
+ InterfaceInfo.InterfaceType ifaceType = getInterfaceType(interfaceInfo);
+
+ switch (ifaceType ) {
+ case VLAN_INTERFACE:
+ IfL2vlan vlanIface = interfaceInfo.getAugmentation(IfL2vlan.class);
+ LOG.trace("L2Vlan: {}",vlanIface);
+ boolean isVlanTransparent = false;
+ long vlanVid = 0;
+ if (vlanIface != null) {
+ vlanVid = vlanIface.getVlanId() == null ? 0 : vlanIface.getVlanId().getValue();
+ isVlanTransparent = vlanIface.getL2vlanMode() == IfL2vlan.L2vlanMode.Transparent;
+ }
+ if (vlanVid != 0 && !isVlanTransparent) {
+ result.add(new ActionInfo(ActionType.push_vlan, new String[] {}, actionKeyStart));
+ actionKeyStart++;
+ result.add(new ActionInfo(ActionType.set_field_vlan_vid,
+ new String[] { Long.toString(vlanVid) }, actionKeyStart));
+ actionKeyStart++;
+ }
+ result.add(new ActionInfo(ActionType.output, new String[] {portNo}, actionKeyStart));
+ actionKeyStart++;
+ break;
+ case MPLS_OVER_GRE:
+ case VXLAN_TRUNK_INTERFACE:
+ case GRE_TRUNK_INTERFACE:
+ if(tunnelKey != null) {
+ result.add(new ActionInfo(ActionType.set_field_tunnel_id,
+ new BigInteger[] { BigInteger.valueOf(tunnelKey.longValue()) },
+ actionKeyStart) );
+ actionKeyStart++;
+ }
+
+ result.add(new ActionInfo(ActionType.output, new String[] { portNo}, actionKeyStart));
+ actionKeyStart++;
+ break;
+
+ default:
+ LOG.warn("Interface Type {} not handled yet", ifaceType);
+ break;
+ }
+
+ return result;
+ }
+
+