controller-punt-protection: add table ids for ARP rate limiting
[genius.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / genius / mdsalutil / NwConstants.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.genius.mdsalutil;
9
10 import java.math.BigInteger;
11
12 public interface NwConstants {
13
14     // EthType Values
15     int ETHTYPE_802_1Q            = 0X8100;
16     int ETHTYPE_IPV4              = 0X0800;
17     int ETHTYPE_IPV6              = 0x86dd;
18     int ETHTYPE_ARP               = 0X0806;
19
20     int ETHTYPE_MPLS_UC           = 0X8847;
21     int ETHTYPE_PBB               = 0X88E7;
22
23     String MACADDR_SEP = ":";
24
25     String IPV4PREFIX = "/32";
26     String IPV6PREFIX = "/128";
27     String IPV4_SEP = ".";
28     String IPV6_SEP = ":";
29
30     //Protocol Type
31     int IP_PROT_ICMP = 1;
32     int IP_PROT_TCP = 6;
33     int IP_PROT_UDP = 17;
34     int IP_PROT_GRE = 47;
35
36     //ARP TYPE
37     int ARP_REQUEST = 1;
38     int ARP_REPLY = 2;
39
40     //Default Port
41     int UDP_DEFAULT_PORT = 4789;
42
43
44     // Flow Actions
45     int ADD_FLOW = 0;
46     int DEL_FLOW = 1;
47     int MOD_FLOW = 2;
48
49     // Flow Constants
50     String FLOWID_SEPARATOR = ".";
51     int TABLE_MISS_FLOW = 0;
52     int TABLE_MISS_PRIORITY = 0;
53
54     int DEFAULT_ARP_FLOW_PRIORITY = 100;
55
56     // Ingress (w.r.t switch) service indexes
57     short DEFAULT_SERVICE_INDEX = 0;
58     short SFC_SERVICE_INDEX = 1;
59     short SCF_SERVICE_INDEX = 1;
60     short ACL_SERVICE_INDEX = 2;
61     short INGRESS_COUNTERS_SERVICE_INDEX = 3;
62     short SFC_CLASSIFIER_INDEX = 4;
63     short DHCP_SERVICE_INDEX = 5;
64     short QOS_SERVICE_INDEX = 6;
65     short IPV6_SERVICE_INDEX = 7;
66     short COE_KUBE_PROXY_SERVICE_INDEX = 8;
67     short L3VPN_SERVICE_INDEX = 9;
68     short ELAN_SERVICE_INDEX = 10;
69     short L3_VPNV6_SERVICE_INDEX = 11;
70
71     String DHCP_SERVICE_NAME = "DHCP_SERVICE";
72     String ACL_SERVICE_NAME = "ACL_SERVICE";
73     String QOS_SERVICE_NAME = "QOS_SERVICE";
74     String IPV6_SERVICE_NAME = "IPV6_SERVICE";
75     String SCF_SERVICE_NAME = "SCF_SERVICE";
76     String SFC_SERVICE_NAME = "SFC_SERVICE";
77     String L3VPN_SERVICE_NAME = "L3VPN_SERVICE";
78     String ELAN_SERVICE_NAME = "ELAN_SERVICE";
79     String SFC_CLASSIFIER_SERVICE_NAME = "SFC_CLASSIFIER_SERVICE";
80     String DEFAULT_EGRESS_SERVICE_NAME = "DEFAULT_EGRESS_SERVICE";
81     String L3_VPNV6_SERVICE_NAME = "VPNV6 SERVICE";
82     String COE_KUBE_PROXY_SERVICE_NAME = "COE_KUBE_PROXY_SERVICE";
83
84     // Egress (w.r.t switch) service indexes
85     short EGRESS_ACL_SERVICE_INDEX = 6;
86     short EGRESS_POLICY_SERVICE_INDEX = 6;
87     short EGRESS_COUNTERS_SERVICE_INDEX = 7;
88     short EGRESS_SFC_CLASSIFIER_SERVICE_INDEX = 8;
89     short DEFAULT_EGRESS_SERVICE_INDEX = 9;
90
91     String EGRESS_ACL_SERVICE_NAME = "EGRESS_ACL_SERVICE";
92     String EGRESS_POLICY_SERVICE_NAME = "EGRESS_POLICY_SERVICE";
93     String EGRESS_SFC_CLASSIFIER_SERVICE_NAME = "EGRESS_SFC_CLASSIFIER_SERVICE";
94     String INGRESS_COUNTERS_SERVICE_NAME = "INGRESS_COUNTERS_SERVICE";
95     String EGRESS_COUNTERS_SERVICE_NAME = "EGRESS_COUNTERS_SERVICE";
96
97     BigInteger COOKIE_IPV6_TABLE = new BigInteger("4000000", 16);
98     BigInteger COOKIE_QOS_TABLE = new BigInteger("4000001", 16);
99     BigInteger VLAN_TABLE_COOKIE = new BigInteger("8000000", 16);
100     BigInteger COOKIE_VM_INGRESS_TABLE = new BigInteger("8000001", 16);
101     BigInteger COOKIE_VM_LFIB_TABLE = new BigInteger("8000002", 16);
102     BigInteger COOKIE_VM_FIB_TABLE =  new BigInteger("8000003", 16);
103     BigInteger COOKIE_DNAT_TABLE = new BigInteger("8000004", 16);
104     BigInteger COOKIE_TS_TABLE = new BigInteger("8000005", 16);
105     BigInteger COOKIE_SNAT_TABLE = new BigInteger("8000006", 16);
106     BigInteger EGRESS_DISPATCHER_TABLE_COOKIE = new BigInteger("8000007", 16);
107     BigInteger COOKIE_OUTBOUND_NAPT_TABLE = new BigInteger("8000008", 16);
108     BigInteger COOKIE_L3_GW_MAC_TABLE = new BigInteger("8000009", 16);
109     BigInteger EGRESS_POLICY_CLASSIFIER_COOKIE = new BigInteger("8000230", 16);
110     BigInteger EGRESS_POLICY_ROUTING_COOKIE = new BigInteger("8000231", 16);
111     BigInteger COOKIE_VXLAN_TRUNK_L2_TABLE = new BigInteger("1200000", 16);
112     BigInteger COOKIE_GRE_TRUNK_L2_TABLE = new BigInteger("1400000", 16);
113     BigInteger COOKIE_ELAN_INGRESS_TABLE = new BigInteger("8040000", 16);
114     BigInteger TUNNEL_TABLE_COOKIE = new BigInteger("9000000", 16);
115     BigInteger COOKIE_ARP_RESPONDER = new BigInteger("8220000", 16);
116     BigInteger COOKIE_COE_KUBE_PROXY_TABLE = new BigInteger("8230000", 16);
117
118     //Table IDs
119     short VLAN_INTERFACE_INGRESS_TABLE = 0;
120     short VXLAN_TRUNK_INTERFACE_TABLE = 10;
121     short TRUNK_L2_TABLE = 11;
122     short GRE_TRUNK_INTERFACE_TABLE = 12;
123     short LPORT_DISPATCHER_TABLE = 17;
124     short DHCP_TABLE_EXTERNAL_TUNNEL = 18;
125     short L3_GW_MAC_TABLE = 19;
126     short L3_LFIB_TABLE = 20;
127     short L3_FIB_TABLE = 21;
128     short L3_SUBNET_ROUTE_TABLE = 22;
129     short L3VNI_EXTERNAL_TUNNEL_DEMUX_TABLE = 23;
130     short L2VNI_EXTERNAL_TUNNEL_DEMUX_TABLE = 24;
131     short PDNAT_TABLE = 25;
132     short PSNAT_TABLE = 26;
133     short DNAT_TABLE = 27;
134     short SNAT_TABLE = 28;
135     short INTERNAL_TUNNEL_TABLE = 36;
136     short EXTERNAL_TUNNEL_TABLE = 38;
137     short ARP_CHECK_TABLE = 43;
138     short ARP_LEARN_TABLE_1 = 195;
139     short ARP_LEARN_TABLE_2 = 196;
140     short INBOUND_NAPT_TABLE = 44;
141     short IPV6_TABLE = 45;
142     short OUTBOUND_NAPT_TABLE = 46;
143     short NAPT_PFIB_TABLE = 47;
144     short ELAN_BASE_TABLE = 48;
145     short ELAN_SMAC_LEARNED_TABLE = 49;
146     short ELAN_SMAC_TABLE = 50;
147     short ELAN_DMAC_TABLE = 51;
148     short ELAN_UNKNOWN_DMAC_TABLE = 52;
149     short ELAN_FILTER_EQUALS_TABLE = 55;
150     short DHCP_TABLE = 60;
151     short SCF_UP_SUB_FILTER_TCP_BASED_TABLE = 70;
152     short SCF_DOWN_SUB_FILTER_TCP_BASED_TABLE = 72;
153     short SCF_CHAIN_FWD_TABLE = 75;
154     short L3_INTERFACE_TABLE = 80;
155     short ARP_RESPONDER_TABLE = 81;
156     short SFC_TRANSPORT_CLASSIFIER_TABLE = 82;
157     short SFC_TRANSPORT_INGRESS_TABLE = 83;
158     short SFC_TRANSPORT_PATH_MAPPER_TABLE = 84;
159     short SFC_TRANSPORT_PATH_MAPPER_ACL_TABLE = 85;
160     short SFC_TRANSPORT_NEXT_HOP_TABLE = 86;
161     short SFC_TRANSPORT_EGRESS_TABLE = 87;
162     short QOS_DSCP_TABLE = 90;
163     short INGRESS_SFC_CLASSIFIER_FILTER_TABLE = 100;
164     short INGRESS_SFC_CLASSIFIER_ACL_TABLE = 101;
165     short COE_KUBE_PROXY_TABLE = 180;
166     short INGRESS_ACL_ANTI_SPOOFING_TABLE = 210;
167     short INGRESS_ACL_CONNTRACK_CLASSIFIER_TABLE = 211;
168     short INGRESS_ACL_CONNTRACK_SENDER_TABLE = 212;
169     short INGRESS_ACL_FOR_EXISTING_TRAFFIC_TABLE = 213;
170     short INGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE = 214;
171     short INGRESS_ACL_RULE_BASED_FILTER_TABLE = 215;
172     short INGRESS_REMOTE_ACL_TABLE = 216;
173     short INGRESS_ACL_COMMITTER_TABLE = 217;
174     short INGRESS_COUNTERS_TABLE = 219;
175     short EGRESS_LPORT_DISPATCHER_TABLE = 220;
176     short EGRESS_SFC_CLASSIFIER_FILTER_TABLE = 221;
177     short EGRESS_SFC_CLASSIFIER_NEXTHOP_TABLE = 222;
178     short EGRESS_SFC_CLASSIFIER_EGRESS_TABLE = 223;
179     short EGRESS_POLICY_CLASSIFIER_TABLE = 230;
180     short EGRESS_POLICY_ROUTING_TABLE = 231;
181     short EGRESS_ACL_DUMMY_TABLE = 239;
182     short EGRESS_ACL_ANTI_SPOOFING_TABLE = 240;
183     short EGRESS_ACL_CONNTRACK_CLASSIFIER_TABLE = 241;
184     short EGRESS_ACL_CONNTRACK_SENDER_TABLE = 242;
185     short EGRESS_ACL_FOR_EXISTING_TRAFFIC_TABLE = 243;
186     short EGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE = 244;
187     short EGRESS_ACL_RULE_BASED_FILTER_TABLE = 245;
188     short EGRESS_REMOTE_ACL_TABLE = 246;
189     short EGRESS_ACL_COMMITTER_TABLE = 247;
190     short EGRESS_COUNTERS_TABLE = 249;
191
192     enum NxmOfFieldType {
193         NXM_OF_IN_PORT(0x0000, 0, 2, 16),
194         NXM_OF_ETH_DST(0x0000, 1, 6, 48),
195         NXM_OF_ETH_SRC(0x0000, 2, 6, 48),
196         NXM_OF_ETH_TYPE(0x0000, 3, 2, 16),
197         NXM_OF_VLAN_TCI(0x0000, 4, 2, 12),
198         NXM_OF_IP_TOS(0x0000, 5, 1, 8),
199         NXM_OF_IP_PROTO(0x0000, 6, 1, 8),
200         NXM_OF_IP_SRC(0x0000, 7, 4, 32),
201         NXM_OF_IP_DST(0x0000, 8, 4, 32),
202         NXM_OF_TCP_SRC(0x0000, 9, 2, 16),
203         NXM_OF_TCP_DST(0x0000, 10, 2, 16),
204         NXM_OF_UDP_SRC(0x0000, 11, 2, 16),
205         NXM_OF_UDP_DST(0x0000, 12, 2, 16),
206         NXM_OF_ICMP_TYPE(0x0000, 13, 1, 8),
207         NXM_OF_ICMP_CODE(0x0000, 14, 1, 8),
208         NXM_OF_ARP_OP(0x0000, 15, 2, 16),
209         NXM_OF_ARP_SPA(0x0000, 16, 4, 32),
210         NXM_OF_ARP_TPA(0x0000, 17, 4, 32),
211         NXM_NX_IPV6_SRC(0x0001, 19, 16, 128),
212         NXM_NX_IPV6_DST(0x0001, 20, 16, 128),
213         OXM_OF_METADATA(0x8000L, 2, 8, -1),
214         NXM_NX_REG0(0x0001, 0, 4, -1),
215         NXM_NX_REG1(0x0001, 1, 4, -1),
216         NXM_NX_REG2(0x0001, 2, 4, -1),
217         NXM_NX_REG3(0x0001, 3, 4, -1),
218         NXM_NX_REG4(0x0001, 4, 4, -1),
219         NXM_NX_REG5(0x0001, 5, 4, -1),
220         NXM_NX_REG6(0x0001, 6, 4, -1),
221         NXM_NX_REG7(0x0001, 7, 4, -1);
222
223         long type;
224         int flowModHeaderLen;
225
226         NxmOfFieldType(long vendor, long field, long length, int flowModHeaderLen) {
227             type = nxmHeader(vendor, field, length);
228             this.flowModHeaderLen = flowModHeaderLen;
229         }
230
231         private static long nxmHeader(long vendor, long field, long length) {
232             return vendor << 16 | field << 9 | length;
233         }
234
235         @Deprecated
236         public String getHexType() {
237             return String.valueOf(type);
238         }
239
240         public long getType() {
241             return type;
242         }
243
244         @Deprecated
245         public String getFlowModHeaderLen() {
246             return String.valueOf(flowModHeaderLen);
247         }
248
249         public int getFlowModHeaderLenInt() {
250             return flowModHeaderLen;
251         }
252     }
253 }