2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action;
11 import java.util.ArrayList;
12 import java.util.List;
14 import org.opendaylight.openflowplugin.api.OFConstants;
15 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
17 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.InjectionKey;
18 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.InjectionResultTargetKey;
19 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ResultInjector;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.dst._case.SetNwDstActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;
39 * add prepared convertors and injectors into given mappings
41 * @see ActionSetNwSrcReactor
43 public class ActionSetNwDstReactorMappingFactory {
46 * @param conversionMapping conversion mapping
48 public static void addSetNwDstConvertors(final Map<Short, Convertor<SetNwDstActionCase, ?>> conversionMapping) {
49 conversionMapping.put(OFConstants.OFP_VERSION_1_0, new ActionSetNwDstConvertorV10Impl());
50 conversionMapping.put(OFConstants.OFP_VERSION_1_3, new ActionSetNwDstConvertorImpl());
54 * @param injectionMapping injection mapping
56 public static void addSetNwDstInjectors(final Map<InjectionKey, ResultInjector<?, ?>> injectionMapping) {
57 // OF-1.0| Ipv4Address -> ActionBuilder; SetNwDst
58 injectionMapping.put(new InjectionResultTargetKey(OFConstants.OFP_VERSION_1_0,
59 ActionBuilder.class, Ipv4Address.class),
60 new ResultInjector<Ipv4Address, ActionBuilder>() {
62 public void inject(final Ipv4Address result, final ActionBuilder target) {
63 SetNwDstCaseBuilder setNwDstCaseBuilder = new SetNwDstCaseBuilder();
64 SetNwDstActionBuilder setNwDstActionBuilder = new SetNwDstActionBuilder();
65 setNwDstActionBuilder.setIpAddress(result);
66 setNwDstCaseBuilder.setSetNwDstAction(setNwDstActionBuilder.build());
67 target.setActionChoice(setNwDstCaseBuilder.build());
71 // OF-1.3| Ipv4Address -> ActionBuilder; SetNwDst
72 injectionMapping.put(new InjectionResultTargetKey(OFConstants.OFP_VERSION_1_3,
73 ActionBuilder.class, Ipv4Address.class),
74 new ResultInjector<Ipv4Address, ActionBuilder>() {
76 public void inject(final Ipv4Address result, final ActionBuilder target) {
77 List<MatchEntry> matchEntriesList = new ArrayList<>();
78 MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
79 matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
80 matchEntryBuilder.setOxmMatchField(Ipv4Dst.class);
82 Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
83 Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();
84 ipv4DstBuilder.setIpv4Address(result);
85 Integer prefix = IpConversionUtil.extractPrefix(result);
87 ipv4DstBuilder.setMask(IpConversionUtil.convertIpv6PrefixToByteArray(prefix));
89 ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());
91 matchEntryBuilder.setHasMask(false);
92 matchEntryBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
93 matchEntriesList.add(matchEntryBuilder.build());
95 SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
96 SetFieldActionBuilder setFieldActionBuilder = new SetFieldActionBuilder();
97 setFieldActionBuilder.setMatchEntry(matchEntriesList);
98 setFieldCaseBuilder.setSetFieldAction(setFieldActionBuilder.build());
99 target.setActionChoice(setFieldCaseBuilder.build());
103 // OF-1.3| Ipv6Address -> ActionBuilder; SetNwDst
104 injectionMapping.put(new InjectionResultTargetKey(OFConstants.OFP_VERSION_1_3,
105 ActionBuilder.class, Ipv6Address.class),
106 new ResultInjector<Ipv6Address, ActionBuilder>() {
108 public void inject(final Ipv6Address result, final ActionBuilder target) {
109 List<MatchEntry> matchEntriesList = new ArrayList<>();
110 MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
111 matchEntryBuilder.setOxmClass(OpenflowBasicClass.class);
112 matchEntryBuilder.setOxmMatchField(Ipv6Dst.class);
114 Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();
115 Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();
116 ipv6DstBuilder.setIpv6Address(result);
117 Integer prefix = IpConversionUtil.extractPrefix(result);
118 if (prefix != null) {
119 ipv6DstBuilder.setMask(IpConversionUtil.convertIpv6PrefixToByteArray(prefix));
121 ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());
123 matchEntryBuilder.setHasMask(false);
124 matchEntryBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());
125 matchEntriesList.add(matchEntryBuilder.build());
127 SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
128 SetFieldActionBuilder setFieldActionBuilder = new SetFieldActionBuilder();
129 setFieldActionBuilder.setMatchEntry(matchEntriesList);
130 setFieldCaseBuilder.setSetFieldAction(setFieldActionBuilder.build());
131 target.setActionChoice(setFieldCaseBuilder.build());