|
| 1 | +import struct, re |
1 | 2 | import pyretic.vendor
|
2 |
| -from ryu.lib.packet import * |
3 |
| -from ryu.lib.packet import vlan |
4 |
| - |
5 |
| -import struct |
6 |
| -import re |
7 | 3 |
|
8 |
| -from bitarray import bitarray |
| 4 | +from ryu.lib.packet import * |
| 5 | +from ryu.lib import addrconv |
9 | 6 |
|
10 |
| -from pyretic.core.network import IPAddr, EthAddr |
11 | 7 | from pyretic.core import util
|
12 |
| - |
13 |
| -from ryu.lib import addrconv |
14 |
| - |
15 |
| -["switch", "inport", "header_len", "payload_len", "srcmac", "dstmac", "ethtype", 'vlan_id', 'vlan_pcp', "ethtype", "srcip", "dstip", "protocol", "tos", "srcport", "dstport", "ethtype", "protocol", "srcip", "dstip", "raw"] |
| 8 | +from pyretic.core.network import IPAddr, EthAddr |
16 | 9 |
|
17 | 10 | __all__ = ['of_field', 'of_fields', 'get_packet_processor', 'Packet']
|
18 | 11 | _field_list = dict()
|
|
26 | 19 | TCP_PROTO = 6
|
27 | 20 | UDP_PROTO = 17
|
28 | 21 |
|
| 22 | +################################################## |
| 23 | +# EMPTY TEMPLATE PACKETS FOR DIFFERENT PROTCOLS |
| 24 | +################################################## |
29 | 25 | def arp_packet_gen():
|
30 | 26 | pkt = packet.Packet()
|
31 | 27 | pkt.protocols.append(ethernet.ethernet("ff:ff:ff:ff:ff:ff", "ff:ff:ff:ff:ff:ff", ARP))
|
@@ -181,6 +177,12 @@ def convert(h, v):
|
181 | 177 | # Build the packet processor pipeline
|
182 | 178 | return self
|
183 | 179 |
|
| 180 | +def get_packet_processor(): |
| 181 | + try: |
| 182 | + return get_packet_processor.processor |
| 183 | + except AttributeError: |
| 184 | + get_packet_processor.processor = Processor().compile() |
| 185 | + return get_packet_processor.processor |
184 | 186 |
|
185 | 187 | ################################################################################
|
186 | 188 | # Field Validators
|
@@ -279,7 +281,7 @@ def vlan_validator(*args, **kwargs):
|
279 | 281 |
|
280 | 282 |
|
281 | 283 | ################################################################################
|
282 |
| -# Field definition and Decorators |
| 284 | +# Field Decorator |
283 | 285 | ################################################################################
|
284 | 286 | def of_field(match="", pyretic_field="", validator=true_validator(), version="1.0"):
|
285 | 287 | matches = match.split(".")
|
@@ -353,6 +355,9 @@ def is_valid(self, ryu_pkt):
|
353 | 355 |
|
354 | 356 | return _of_field
|
355 | 357 |
|
| 358 | +####################### |
| 359 | +# OPENFLOW 1.0 FIELDS |
| 360 | +####################### |
356 | 361 | @of_field("udp.dst_port", "dstport", proto_validator(UDP_PROTO), "1.0")
|
357 | 362 | class UdpDstPort(object): pass
|
358 | 363 |
|
@@ -478,9 +483,6 @@ class ArpSrcIp(object): pass
|
478 | 483 | @of_field("arp.dst_ip", "dstip", ether_validator(ARP), version="1.0")
|
479 | 484 | class ArpDstIp(object): pass
|
480 | 485 |
|
481 |
| -def get_packet_processor(): |
482 |
| - return Processor().compile() |
483 |
| - |
484 | 486 | ################################################################################
|
485 | 487 | # Packet
|
486 | 488 | ################################################################################
|
|
0 commit comments