Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
wlan_matches.h
1 #ifndef WLAN_MATCHES_H
2 #define WLAN_MATCHES_H
3 
4 #include "../../coxmatch.h"
5 
6 namespace rofl {
7 namespace openflow {
8 namespace experimental {
9 namespace wlan {
10 
11 static uint16_t const OFPXMC_EXPERIMENTER = 0xffff;
12 
13 /* OXM Flow match field types for OpenFlow Experimental */
14 enum oxm_ofx_match_fields {
15  /* IEEE 802.11 related extensions */
16  OFPXMT_OFX_WLAN_FC = 30,
17  OFPXMT_OFX_WLAN_TYPE = 31,
18  OFPXMT_OFX_WLAN_SUBTYPE = 32,
19  OFPXMT_OFX_WLAN_DIRECTION = 33,
20  OFPXMT_OFX_WLAN_ADDRESS_1 = 34,
21  OFPXMT_OFX_WLAN_ADDRESS_2 = 35,
22  OFPXMT_OFX_WLAN_ADDRESS_3 = 36,
23 };
24 
25 /* OXM Flow match field types for OpenFlow basic class. */
26 enum oxm_tlv_match_fields {
27  OXM_TLV_EXPR_WLAN_FC = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_FC << 9) | 2,
28  OXM_TLV_EXPR_WLAN_FC_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_FC << 9) | 4 | HAS_MASK_FLAG,
29  OXM_TLV_EXPR_WLAN_TYPE = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_TYPE << 9) | 1,
30  OXM_TLV_EXPR_WLAN_TYPE_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_TYPE << 9) | 2 | HAS_MASK_FLAG,
31  OXM_TLV_EXPR_WLAN_SUBTYPE = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_SUBTYPE << 9) | 1,
32  OXM_TLV_EXPR_WLAN_SUBTYPE_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_SUBTYPE << 9) | 2 | HAS_MASK_FLAG,
33  OXM_TLV_EXPR_WLAN_DIRECTION = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_DIRECTION << 9) | 1,
34  OXM_TLV_EXPR_WLAN_DIRECTION_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_DIRECTION << 9) | 2 | HAS_MASK_FLAG,
35  OXM_TLV_EXPR_WLAN_ADDRESS_1 = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_ADDRESS_1 << 9) | 6,
36  OXM_TLV_EXPR_WLAN_ADDRESS_1_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_ADDRESS_1 << 9) | 12 | HAS_MASK_FLAG,
37  OXM_TLV_EXPR_WLAN_ADDRESS_2 = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_ADDRESS_2 << 9) | 6,
38  OXM_TLV_EXPR_WLAN_ADDRESS_2_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_ADDRESS_2 << 9) | 12 | HAS_MASK_FLAG,
39  OXM_TLV_EXPR_WLAN_ADDRESS_3 = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_ADDRESS_3 << 9) | 6,
40  OXM_TLV_EXPR_WLAN_ADDRESS_3_MASK = (OFPXMC_EXPERIMENTER << 16) | (OFPXMT_OFX_WLAN_ADDRESS_3 << 9) | 12 | HAS_MASK_FLAG,
41 };
42 
43 
48 public:
50  uint16_t fc) :
51  coxmatch(OXM_TLV_EXPR_WLAN_FC, fc) {};
53  uint16_t fc, uint16_t mask) :
54  coxmatch(OXM_TLV_EXPR_WLAN_FC_MASK, fc, mask) {};
56  coxmatch const& oxm) :
57  coxmatch(oxm) {};
58  virtual
60  friend std::ostream&
61  operator<< (std::ostream& os, coxmatch_ofx_wlan_fc const& oxm) {
62  os << dynamic_cast<coxmatch const&>(oxm);
63  os << indent(2) << "<wlan-fc: 0x" << std::hex
64  << (int)oxm.get_u16value() << "/0x" << (int)oxm.get_u16mask()
65  << std::dec << " >" << std::endl;
66  return os;
67  };
68 };
69 
70 
71 
76 public:
78  uint8_t type) :
79  coxmatch(OXM_TLV_EXPR_WLAN_TYPE, type) {};
81  uint8_t type, uint8_t mask) :
82  coxmatch(OXM_TLV_EXPR_WLAN_TYPE_MASK, type, mask) {};
84  coxmatch const& oxm) :
85  coxmatch(oxm) {};
86  virtual
88  friend std::ostream&
89  operator<< (std::ostream& os, coxmatch_ofx_wlan_type const& oxm) {
90  os << dynamic_cast<coxmatch const&>(oxm);
91  os << indent(2) << "<wlan-type: 0x" << std::hex
92  << (int)oxm.get_u8value() << "/0x" << (int)oxm.get_u8mask()
93  << std::dec << " >" << std::endl;
94  return os;
95  };
96 };
97 
98 
99 
104 public:
106  uint8_t subtype) :
107  coxmatch(OXM_TLV_EXPR_WLAN_SUBTYPE, subtype) {};
109  uint8_t subtype, uint8_t mask) :
110  coxmatch(OXM_TLV_EXPR_WLAN_SUBTYPE_MASK, subtype, mask) {};
112  coxmatch const& oxm) :
113  coxmatch(oxm) {};
114  virtual
116  friend std::ostream&
117  operator<< (std::ostream& os, coxmatch_ofx_wlan_subtype const& oxm) {
118  os << dynamic_cast<coxmatch const&>(oxm);
119  os << indent(2) << "<wlan-subtype: 0x" << std::hex
120  << (int)oxm.get_u8value() << "/0x" << (int)oxm.get_u8mask()
121  << std::dec << " >" << std::endl;
122  return os;
123  };
124 };
125 
126 
127 
132 public:
134  uint8_t direction) :
135  coxmatch(OXM_TLV_EXPR_WLAN_DIRECTION, direction) {};
137  uint8_t direction, uint8_t mask) :
138  coxmatch(OXM_TLV_EXPR_WLAN_DIRECTION_MASK, direction, mask) {};
140  coxmatch const& oxm) :
141  coxmatch(oxm) {};
142  virtual
144  friend std::ostream&
145  operator<< (std::ostream& os, coxmatch_ofx_wlan_direction const& oxm) {
146  os << dynamic_cast<coxmatch const&>(oxm);
147  os << indent(2) << "<wlan-direction: 0x" << std::hex
148  << (int)oxm.get_u8value() << "/0x" << (int)oxm.get_u8mask()
149  << std::dec << " >" << std::endl;
150  return os;
151  };
152 };
153 
154 
155 
160 public:
162  cmacaddr const& maddr) :
163  coxmatch(OXM_TLV_EXPR_WLAN_ADDRESS_1, maddr) {};
165  cmacaddr const& maddr, cmacaddr const& mask) :
166  coxmatch(OXM_TLV_EXPR_WLAN_ADDRESS_1_MASK, maddr, mask) {};
168  coxmatch const& oxm) :
169  coxmatch(oxm) {};
170  virtual
172  friend std::ostream&
173  operator<< (std::ostream& os, coxmatch_ofx_wlan_address_1 const& oxm) {
174  os << dynamic_cast<coxmatch const&>(oxm);
175  os << indent(2) << "<wlan-address-1 value: >" << std::endl;
176  { indent i(4); os << oxm.get_u48value(); }
177  os << indent(2) << "<wlan-address-1 mask: >" << std::endl;
178  { indent i(4); os << oxm.get_u48mask(); }
179  return os;
180  };
181 };
182 
183 
184 
189 public:
191  cmacaddr const& maddr) :
192  coxmatch(OXM_TLV_EXPR_WLAN_ADDRESS_2, maddr) {};
194  cmacaddr const& maddr, cmacaddr const& mask) :
195  coxmatch(OXM_TLV_EXPR_WLAN_ADDRESS_2_MASK, maddr, mask) {};
197  coxmatch const& oxm) :
198  coxmatch(oxm) {};
199  virtual
201  friend std::ostream&
202  operator<< (std::ostream& os, coxmatch_ofx_wlan_address_2 const& oxm) {
203  os << dynamic_cast<coxmatch const&>(oxm);
204  os << indent(2) << "<wlan-address-2 value: >" << std::endl;
205  { indent i(4); os << oxm.get_u48value(); }
206  os << indent(2) << "<wlan-address-2 mask: >" << std::endl;
207  { indent i(4); os << oxm.get_u48mask(); }
208  return os;
209  };
210 };
211 
212 
213 
218 public:
220  cmacaddr const& maddr) :
221  coxmatch(OXM_TLV_EXPR_WLAN_ADDRESS_3, maddr) {};
223  cmacaddr const& maddr, cmacaddr const& mask) :
224  coxmatch(OXM_TLV_EXPR_WLAN_ADDRESS_3_MASK, maddr, mask) {};
226  coxmatch const& oxm) :
227  coxmatch(oxm) {};
228  virtual
230  friend std::ostream&
231  operator<< (std::ostream& os, coxmatch_ofx_wlan_address_3 const& oxm) {
232  os << dynamic_cast<coxmatch const&>(oxm);
233  os << indent(2) << "<wlan-address-3 value: >" << std::endl;
234  { indent i(4); os << oxm.get_u48value(); }
235  os << indent(2) << "<wlan-address-3 mask: >" << std::endl;
236  { indent i(4); os << oxm.get_u48mask(); }
237  return os;
238  };
239 };
240 
241 }; // end of namespace wlan
242 }; // end of namespace experimental
243 }; // end of namespace openflow
244 }; // end of namespace rofl
245 
246 #endif
Definition: caddress.h:152
Definition: coxmatch.h:49
Definition: logging.h:76