diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-08-28 08:13:50 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2012-08-29 08:42:26 +0900 |
commit | 77df140ecf18bd083af14d81357706efc62dccbe (patch) | |
tree | 5e2602656c57fb56af5015f6c290e79847e315cb | |
parent | 4d00bc802543dc0585af01ef88d0b33bb3f6f6aa (diff) |
packet lib: set _MIN_LEN class variable
All protocols need to check if the data length is long enough so let's
set the minimum length in the same way.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/lib/packet/arp.py | 3 | ||||
-rw-r--r-- | ryu/lib/packet/ethernet.py | 3 | ||||
-rw-r--r-- | ryu/lib/packet/ipv4.py | 5 | ||||
-rw-r--r-- | ryu/lib/packet/tcp.py | 1 | ||||
-rw-r--r-- | ryu/lib/packet/udp.py | 6 | ||||
-rw-r--r-- | ryu/lib/packet/vlan.py | 3 |
6 files changed, 12 insertions, 9 deletions
diff --git a/ryu/lib/packet/arp.py b/ryu/lib/packet/arp.py index f71d5657..24ba2c02 100644 --- a/ryu/lib/packet/arp.py +++ b/ryu/lib/packet/arp.py @@ -19,6 +19,7 @@ from . import packet_base class arp(packet_base.PacketBase): _PACK_STR = '!HHBBH6sI6sI' + _MIN_LEN = struct.calcsize(_PACK_STR) def __init__(self, hwtype, proto, hlen, plen, opcode, src_mac, src_ip, dst_mac, dst_ip): @@ -32,7 +33,7 @@ class arp(packet_base.PacketBase): self.src_ip = src_ip self.dst_mac = dst_mac self.dst_ip = dst_ip - self.length = struct.calcsize(arp._PACK_STR) + self.length = arp._MIN_LEN @classmethod def parser(cls, buf): diff --git a/ryu/lib/packet/ethernet.py b/ryu/lib/packet/ethernet.py index adb706a0..de034562 100644 --- a/ryu/lib/packet/ethernet.py +++ b/ryu/lib/packet/ethernet.py @@ -21,13 +21,14 @@ from ryu.ofproto import ether class ethernet(packet_base.PacketBase): _PACK_STR = '!6s6sH' + _MIN_LEN = struct.calcsize(_PACK_STR) def __init__(self, dst, src, ethertype): super(ethernet, self).__init__() self.dst = dst self.src = src self.ethertype = ethertype - self.length = struct.calcsize(ethernet._PACK_STR) + self.length = ethernet._MIN_LEN @classmethod def parser(cls, buf): diff --git a/ryu/lib/packet/ipv4.py b/ryu/lib/packet/ipv4.py index bd7b6330..93c38285 100644 --- a/ryu/lib/packet/ipv4.py +++ b/ryu/lib/packet/ipv4.py @@ -23,6 +23,7 @@ from ryu.ofproto import inet class ipv4(packet_base.PacketBase): _PACK_STR = '!BBHHHBBHII' + _MIN_LEN = struct.calcsize(_PACK_STR) def __init__(self, version, header_length, tos, total_length, identification, flags, offset, ttl, proto, csum, @@ -53,8 +54,8 @@ class ipv4(packet_base.PacketBase): msg = cls(version, header_length, tos, total_length, identification, flags, offset, ttl, proto, csum, src, dst) - if msg.length > struct.calcsize(ipv4._PACK_STR): - self.extra = buf[struct.calcsize(ipv4._PACK_STR):msg.length] + if msg.length > ipv4._MIN_LEN: + self.extra = buf[ipv4._MIN_LEN:msg.length] return msg, ipv4.get_packet_type(proto) diff --git a/ryu/lib/packet/tcp.py b/ryu/lib/packet/tcp.py index 975bfcca..73e700db 100644 --- a/ryu/lib/packet/tcp.py +++ b/ryu/lib/packet/tcp.py @@ -22,6 +22,7 @@ import ipv4 class tcp(packet_base.PacketBase): _PACK_STR = '!HHIIBBHHH' + _MIN_LEN = struct.calcsize(_PACK_STR) def __init__(self, src_port, dst_port, seq, ack, offset, bits, window_size, csum, urgent): diff --git a/ryu/lib/packet/udp.py b/ryu/lib/packet/udp.py index 6fc84fc1..2b858d98 100644 --- a/ryu/lib/packet/udp.py +++ b/ryu/lib/packet/udp.py @@ -22,6 +22,7 @@ import ipv4 class udp(packet_base.PacketBase): _PACK_STR = '!HHHH' + _MIN_LEN = struct.calcsize(_PACK_STR) def __init__(self, src_port, dst_port, length, csum=0): super(udp, self).__init__() @@ -35,14 +36,11 @@ class udp(packet_base.PacketBase): (src_port, dst_port, length, csum) = struct.unpack_from(cls._PACK_STR, buf) msg = cls(src_port, dst_port, length, csum) - if length > struct.calcsize(cls._PACK_STR): - msg.data = buf[struct.calcsize(cls._PACK_STR):length] - return msg, None def serialize(self, payload, prev): if self.length == 0: - self.length = struct.calcsize(udp._PACK_STR) + len(payload) + self.length = udp._MIN_LEN + len(payload) h = struct.pack(udp._PACK_STR, self.src_port, self.dst_port, self.length, self.csum) if self.csum == 0: diff --git a/ryu/lib/packet/vlan.py b/ryu/lib/packet/vlan.py index bc33f2ff..4fb93a19 100644 --- a/ryu/lib/packet/vlan.py +++ b/ryu/lib/packet/vlan.py @@ -23,6 +23,7 @@ from ryu.ofproto.ofproto_parser import msg_pack_into class vlan(packet_base.PacketBase): _PACK_STR = "!HH" + _MIN_LEN = struct.calcsize(_PACK_STR) def __init__(self, pcp, cfi, vid, ethertype): super(vlan, self).__init__() @@ -30,7 +31,7 @@ class vlan(packet_base.PacketBase): self.cfi = cfi self.vid = vid self.ethertype = ethertype - self.length = struct.calcsize(vlan._PACK_STR) + self.length = vlan._MIN_LEN @classmethod def parser(cls, buf): |