2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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
8 package org.opendaylight.genius.mdsalutil;
10 import java.math.BigInteger;
12 public final class NwConstants {
15 public static final int ETHTYPE_802_1Q = 0X8100;
16 public static final int ETHTYPE_IPV4 = 0X0800;
17 public static final int ETHTYPE_IPV6 = 0x86dd;
18 public static final int ETHTYPE_ARP = 0X0806;
20 public static final int ETHTYPE_MPLS_UC = 0X8847;
21 public static final int ETHTYPE_PBB = 0X88E7;
23 public static final String MACADDR_SEP = ":";
25 public static final String IPV4PREFIX = "/32";
26 public static final String IPV6PREFIX = "/128";
27 public static final String IPV4_SEP = ".";
28 public static final String IPV6_SEP = ":";
31 public static final int IP_PROT_ICMP = 1;
32 public static final int IP_PROT_TCP = 6;
33 public static final int IP_PROT_UDP = 17;
34 public static final int IP_PROT_GRE = 47;
37 public static final int ARP_REQUEST = 1;
38 public static final int ARP_REPLY = 2;
41 public static final int UDP_DEFAULT_PORT = 4789;
45 public static final int ADD_FLOW = 0;
46 public static final int DEL_FLOW = 1;
47 public static final int MOD_FLOW = 2;
50 public static final String FLOWID_SEPARATOR = ".";
51 public static final int TABLE_MISS_FLOW = 0;
52 public static final int TABLE_MISS_PRIORITY = 0;
54 public static final int DEFAULT_ARP_FLOW_PRIORITY = 100;
56 // Ingress (w.r.t switch) service indexes
57 public static final short DEFAULT_SERVICE_INDEX = 0;
58 public static final short SFC_SERVICE_INDEX = 1;
59 public static final short SCF_SERVICE_INDEX = 1;
60 public static final short ACL_SERVICE_INDEX = 2;
61 public static final short INGRESS_COUNTERS_SERVICE_INDEX = 3;
62 public static final short SFC_CLASSIFIER_INDEX = 4;
63 public static final short DHCP_SERVICE_INDEX = 5;
64 public static final short QOS_SERVICE_INDEX = 6;
65 public static final short IPV6_SERVICE_INDEX = 7;
66 public static final short L3VPN_SERVICE_INDEX = 8;
67 public static final short ELAN_SERVICE_INDEX = 9;
69 public static final String DHCP_SERVICE_NAME = "DHCP_SERVICE";
70 public static final String ACL_SERVICE_NAME = "ACL_SERVICE";
71 public static final String QOS_SERVICE_NAME = "QOS_SERVICE";
72 public static final String IPV6_SERVICE_NAME = "IPV6_SERVICE";
73 public static final String SCF_SERVICE_NAME = "SCF_SERVICE";
74 public static final String SFC_SERVICE_NAME = "SFC_SERVICE";
75 public static final String L3VPN_SERVICE_NAME = "L3VPN_SERVICE";
76 public static final String ELAN_SERVICE_NAME = "ELAN_SERVICE";
77 public static final String SFC_CLASSIFIER_SERVICE_NAME = "SFC_CLASSIFIER_SERVICE";
78 public static final String DEFAULT_EGRESS_SERVICE_NAME = "DEFAULT_EGRESS_SERVICE";
80 // Egress (w.r.t switch) service indexes
81 public static final short EGRESS_ACL_SERVICE_INDEX = 6;
82 public static final short EGRESS_POLICY_SERVICE_INDEX = 6;
83 public static final short EGRESS_COUNTERS_SERVICE_INDEX = 7;
84 public static final short EGRESS_SFC_CLASSIFIER_SERVICE_INDEX = 8;
85 public static final short DEFAULT_EGRESS_SERVICE_INDEX = 9;
87 public static final String EGRESS_ACL_SERVICE_NAME = "EGRESS_ACL_SERVICE";
88 public static final String EGRESS_POLICY_SERVICE_NAME = "EGRESS_POLICY_SERVICE";
89 public static final String EGRESS_SFC_CLASSIFIER_SERVICE_NAME = "EGRESS_SFC_CLASSIFIER_SERVICE";
90 public static final String INGRESS_COUNTERS_SERVICE_NAME = "INGRESS_COUNTERS_SERVICE";
91 public static final String EGRESS_COUNTERS_SERVICE_NAME = "EGRESS_COUNTERS_SERVICE";
93 public static final BigInteger COOKIE_IPV6_TABLE = new BigInteger("4000000", 16);
94 public static final BigInteger COOKIE_QOS_TABLE = new BigInteger("4000001", 16);
95 public static final BigInteger VLAN_TABLE_COOKIE = new BigInteger("8000000", 16);
96 public static final BigInteger COOKIE_VM_INGRESS_TABLE = new BigInteger("8000001", 16);
97 public static final BigInteger COOKIE_VM_LFIB_TABLE = new BigInteger("8000002", 16);
98 public static final BigInteger COOKIE_VM_FIB_TABLE = new BigInteger("8000003", 16);
99 public static final BigInteger COOKIE_DNAT_TABLE = new BigInteger("8000004", 16);
100 public static final BigInteger COOKIE_TS_TABLE = new BigInteger("8000005", 16);
101 public static final BigInteger COOKIE_SNAT_TABLE = new BigInteger("8000006", 16);
102 public static final BigInteger EGRESS_DISPATCHER_TABLE_COOKIE = new BigInteger("8000007", 16);
103 public static final BigInteger COOKIE_OUTBOUND_NAPT_TABLE = new BigInteger("8000008", 16);
104 public static final BigInteger COOKIE_L3_GW_MAC_TABLE = new BigInteger("8000009", 16);
105 public static final BigInteger EGRESS_POLICY_CLASSIFIER_COOKIE = new BigInteger("8000230", 16);
106 public static final BigInteger EGRESS_POLICY_ROUTING_COOKIE = new BigInteger("8000231", 16);
107 public static final BigInteger COOKIE_VXLAN_TRUNK_L2_TABLE = new BigInteger("1200000", 16);
108 public static final BigInteger COOKIE_GRE_TRUNK_L2_TABLE = new BigInteger("1400000", 16);
109 public static final BigInteger COOKIE_ELAN_INGRESS_TABLE = new BigInteger("8040000", 16);
110 public static final BigInteger TUNNEL_TABLE_COOKIE = new BigInteger("9000000", 16);
111 public static final BigInteger COOKIE_ARP_RESPONDER = new BigInteger("8220000", 16);
114 public static final short VLAN_INTERFACE_INGRESS_TABLE = 0;
115 public static final short VXLAN_TRUNK_INTERFACE_TABLE = 10;
116 public static final short TRUNK_L2_TABLE = 11;
117 public static final short GRE_TRUNK_INTERFACE_TABLE = 12;
118 public static final short LPORT_DISPATCHER_TABLE = 17;
119 public static final short DHCP_TABLE_EXTERNAL_TUNNEL = 18;
120 public static final short L3_GW_MAC_TABLE = 19;
121 public static final short L3_LFIB_TABLE = 20;
122 public static final short L3_FIB_TABLE = 21;
123 public static final short L3_SUBNET_ROUTE_TABLE = 22;
124 public static final short L3VNI_EXTERNAL_TUNNEL_DEMUX_TABLE = 23;
125 public static final short PDNAT_TABLE = 25;
126 public static final short PSNAT_TABLE = 26;
127 public static final short DNAT_TABLE = 27;
128 public static final short SNAT_TABLE = 28;
129 public static final short INTERNAL_TUNNEL_TABLE = 36;
130 public static final short EXTERNAL_TUNNEL_TABLE = 38;
131 public static final short INBOUND_NAPT_TABLE = 44;
132 public static final short IPV6_TABLE = 45;
133 public static final short OUTBOUND_NAPT_TABLE = 46;
134 public static final short NAPT_PFIB_TABLE = 47;
135 public static final short ELAN_BASE_TABLE = 48;
136 public static final short ELAN_SMAC_LEARNED_TABLE = 49;
137 public static final short ELAN_SMAC_TABLE = 50;
138 public static final short ELAN_DMAC_TABLE = 51;
139 public static final short ELAN_UNKNOWN_DMAC_TABLE = 52;
140 public static final short ELAN_FILTER_EQUALS_TABLE = 55;
141 public static final short DHCP_TABLE = 60;
142 public static final short SCF_UP_SUB_FILTER_TCP_BASED_TABLE = 70;
143 public static final short SCF_DOWN_SUB_FILTER_TCP_BASED_TABLE = 72;
144 public static final short SCF_CHAIN_FWD_TABLE = 75;
145 public static final short L3_INTERFACE_TABLE = 80;
146 public static final short ARP_RESPONDER_TABLE = 81;
147 public static final short SFC_TRANSPORT_CLASSIFIER_TABLE = 82;
148 public static final short SFC_TRANSPORT_INGRESS_TABLE = 83;
149 public static final short SFC_TRANSPORT_PATH_MAPPER_TABLE = 84;
150 public static final short SFC_TRANSPORT_PATH_MAPPER_ACL_TABLE = 85;
151 public static final short SFC_TRANSPORT_NEXT_HOP_TABLE = 86;
152 public static final short SFC_TRANSPORT_EGRESS_TABLE = 87;
153 public static final short QOS_DSCP_TABLE = 90;
154 public static final short INGRESS_SFC_CLASSIFIER_FILTER_TABLE = 100;
155 public static final short INGRESS_SFC_CLASSIFIER_ACL_TABLE = 101;
156 public static final short INGRESS_ACL_TABLE = 211;
157 public static final short INGRESS_ACL_REMOTE_ACL_TABLE = 212;
158 public static final short INGRESS_ACL_FILTER_TABLE = 213;
159 public static final short INGRESS_LEARN_TABLE = 212;
160 public static final short INGRESS_LEARN_ACL_REMOTE_ACL_TABLE = 213;
161 public static final short INGRESS_LEARN_ACL_FILTER_TABLE = 214;
162 public static final short INGRESS_COUNTERS_TABLE = 219;
163 public static final short EGRESS_LPORT_DISPATCHER_TABLE = 220;
164 public static final short EGRESS_SFC_CLASSIFIER_FILTER_TABLE = 221;
165 public static final short EGRESS_SFC_CLASSIFIER_NEXTHOP_TABLE = 222;
166 public static final short EGRESS_SFC_CLASSIFIER_EGRESS_TABLE = 223;
167 public static final short EGRESS_POLICY_CLASSIFIER_TABLE = 230;
168 public static final short EGRESS_POLICY_ROUTING_TABLE = 231;
169 public static final short EGRESS_ACL_TABLE = 241;
170 public static final short EGRESS_ACL_REMOTE_ACL_TABLE = 242;
171 public static final short EGRESS_ACL_FILTER_TABLE = 243;
172 public static final short EGRESS_LEARN_TABLE = 242;
173 public static final short EGRESS_LEARN_ACL_REMOTE_ACL_TABLE = 243;
174 public static final short EGRESS_LEARN_ACL_FILTER_TABLE = 244;
175 public static final short EGRESS_COUNTERS_TABLE = 249;
177 public enum NxmOfFieldType {
178 NXM_OF_IN_PORT(0x0000, 0, 2, 16),
179 NXM_OF_ETH_DST(0x0000, 1, 6, 48),
180 NXM_OF_ETH_SRC(0x0000, 2, 6, 48),
181 NXM_OF_ETH_TYPE(0x0000, 3, 2, 16),
182 NXM_OF_VLAN_TCI(0x0000, 4, 2, 12),
183 NXM_OF_IP_TOS(0x0000, 5, 1, 8),
184 NXM_OF_IP_PROTO(0x0000, 6, 1, 8),
185 NXM_OF_IP_SRC(0x0000, 7, 4, 32),
186 NXM_OF_IP_DST(0x0000, 8, 4, 32),
187 NXM_OF_TCP_SRC(0x0000, 9, 2, 16),
188 NXM_OF_TCP_DST(0x0000, 10, 2, 16),
189 NXM_OF_UDP_SRC(0x0000, 11, 2, 16),
190 NXM_OF_UDP_DST(0x0000, 12, 2, 16),
191 NXM_OF_ICMP_TYPE(0x0000, 13, 1, 8),
192 NXM_OF_ICMP_CODE(0x0000, 14, 1, 8),
193 NXM_OF_ARP_OP(0x0000, 15, 2, 16),
194 NXM_OF_ARP_SPA(0x0000, 16, 4, 16),
195 NXM_OF_ARP_TPA(0x0000, 17, 4, 16),
196 NXM_NX_REG0(0x0001, 0, 4, -1),
197 NXM_NX_REG1(0x0001, 1, 4, -1),
198 NXM_NX_REG2(0x0001, 2, 4, -1),
199 NXM_NX_REG3(0x0001, 3, 4, -1),
200 NXM_NX_REG4(0x0001, 4, 4, -1),
201 NXM_NX_REG5(0x0001, 5, 4, -1),
202 NXM_NX_REG6(0x0001, 6, 4, -1),
203 NXM_NX_REG7(0x0001, 7, 4, -1);
206 int flowModHeaderLen;
208 NxmOfFieldType(long vendor, long field, long length, int flowModHeaderLen) {
209 type = nxmHeader(vendor, field, length);
210 this.flowModHeaderLen = flowModHeaderLen;
213 private static long nxmHeader(long vendor, long field, long length) {
214 return vendor << 16 | field << 9 | length;
218 public String getHexType() {
219 return String.valueOf(type);
222 public long getType() {
227 public String getFlowModHeaderLen() {
228 return String.valueOf(flowModHeaderLen);
231 public int getFlowModHeaderLenInt() {
232 return flowModHeaderLen;