20 Commits

Author SHA1 Message Date
YAMAMOTO Takashi
afcdb5f123 Packet: fix iterator
replace Packet.__iter__ which doesn't work in cases like nested iterations.

Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-11-22 11:38:12 -08:00
FUJITA Tomonori
a6dce73e33 packet lib: add get_protocol API
get_protocols returns the list of protocols. This is useful for a
packet including the same protocol multiple times (e.g. tunneling such
GRE). However, it's a rare use case. Instead of
'get_protocols(hoge)[0]', let's do 'get_protocol(hoge)' simply.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-09-27 02:43:33 +09:00
Satoshi Kobayashi
0ac175ebab packet lib: Simpler API to assemble a packet
For example:

(Current)
e = ethernet.ethernet(…)
i = ipv4.ipv4(…)
u = udp.udp(…)
pkt = packet.Packet()
pkt.add_protocols(e)
pkt.add_protocols(i)
pkt.add_protocols(u)

(New)
e = ethernet.ethernet(…)
i = ipv4.ipv4(…)
u = udp.udp(…)
pkt = e/i/u

Signed-off-by: Satoshi Kobayashi <satoshi-k@stratosphere.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-09-14 11:13:19 +09:00
watanabe.fumitaka
e0d82b9d37 packet lib to string: add __str__ to base
Signed-off-by: WATANABE Fumitaka <watanabe.fumitaka@nttcom.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-08-06 09:25:49 +09:00
Isaku Yamahata
3837a84eec lib/packet: teach packet library to truncate padding octet
The patch teaches packet library to truncate padding octets.
Change packet_base.parser() to return (header, next_type, rest_of_packet)
The protocol class that knows its payload length should rest_of_packet
where padding octets at the last of packet is truncated.

As bonus,
- fix ipv6 parser as ipv6 header doesn't have options.
  It seems copy-and-paste from ipv4
- improve ipv4, tcp a bit

Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Cc: Shaun Crampton <Shaun.Crampton@metaswitch.com>
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-02 01:19:27 +09:00
FUJITA Tomonori
df42ae87e8 packet lib: avoid exception for bogus protocol header parsing
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-06-20 06:21:49 +09:00
Isaku Yamahata
6d414d0cdd packet lib: packet class supports get_protocol method
returns a list of protocols that matches to the specified protocol.

Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-06-10 07:58:01 -07:00
Isaku Yamahata
178b1dd2bc packet lib: add Packet.__contains__
you can do something like:
  if arp.arp in Packet(msg.data):

  a = arp.arp(...)
  if a in Packet(msg.data):

  >>> from ryu.lib.packet import packet
  >>> from ryu.lib.packet import arp
  >>> a = arp.arp_ip(1, 0, 0, 0, 0)
  >>> p = packet.Packet()
  >>> p.protocols = [a]
  >>> arp.arp in p
  True
  >>> a in p
  True

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-06-10 07:58:01 -07:00
FUJITA Tomonori
a504815b55 packet lib: packet class accepts protocols list argument
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-06-10 07:58:01 -07:00
Shaun Crampton
f0dbb92011 packet lib: allow packet type to be specified when parsing packet
Signed-off-by: Shaun Crampton <Shaun.Crampton@metaswitch.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-06-10 07:32:57 +09:00
Shaun Crampton
95f79d6a51 packet lib: For convenience, make packet into a sequence type
Protocols can mow be accesed as packet[n].

Signed-off-by: Shaun Crampton <Shaun.Crampton@metaswitch.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-06-08 18:44:07 -07:00
YAMAMOTO Takashi
3ed8040393 ryu.lib.packet: docstring tweaks for better rendering
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-04-24 19:39:38 +09:00
YAMAMOTO Takashi
84374d2da5 packet lib: docstring
also, prefix a private method with _.

Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-04-16 02:54:16 +09:00
Isaku Yamahata
826d727d54 ryu/lib/packet/packet.py: should use isinstance instead of __class__.__base__
The current implementation doesn't allow inheriting twice from class PacketBase.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-04-02 12:01:19 +09:00
FUJITA Tomonori
f5d21573a5 packet lib: add unparsed data to Packet.protocols
Easy to access to the data that the library can't parse.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-11 03:34:10 +09:00
FUJITA Tomonori
fd692d330d packet lib: kill find_protocol in Packet class
- Now easy to know the protocol name and iterate protocols.

- find_protocol doesn't handle the case the same protocols are stacked.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-06 13:16:17 +09:00
FUJITA Tomonori
5fd538ee7f packet lib: make Packet class iterator
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-10-06 13:16:13 +09:00
FUJITA Tomonori
3fdb2dabec packet lib: add data serialize support to Packet class
This enables you to send data with Packet class.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-08-28 05:58:25 +09:00
FUJITA Tomonori
d0cc259e3b packet lib: serialize in reverse order
- we need to serialize in reverse order since some need to know
  payload.
- TCP and UDP need the previous protocol info (IP) to calculate the
  checksum.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-08-28 05:58:25 +09:00
FUJITA Tomonori
03b42e23d4 add packet library
As discussed on the mailing list, there is no good packet library
(parses and builds various protocol packets). dpkt isn't flexible
enough (can't nicely handle stacked protocols such as vlan, mpls,
gre). NOX's one is nice but released under GPL3.

So we need our own packet library.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2012-08-21 18:52:15 +09:00