> 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

is the use of the div operator inspired from scapy?

the patch looks good to me.

YAMAMOTO Takashi

> 
> Signed-off-by: Satoshi Kobayashi <[email protected]>
> ---
>  ryu/lib/packet/packet.py             |   14 ++++++++++++++
>  ryu/tests/unit/packet/test_packet.py |   12 ++++++++++++
>  2 files changed, 26 insertions(+), 0 deletions(-)
> 
> diff --git a/ryu/lib/packet/packet.py b/ryu/lib/packet/packet.py
> index 785a28b..f21edbe 100644
> --- a/ryu/lib/packet/packet.py
> +++ b/ryu/lib/packet/packet.py
> @@ -107,6 +107,10 @@ class Packet(object):
>          self.protocol_idx += 1
>          return p
>  
> +    def __div__(self, trailer):
> +        self.add_protocol(trailer)
> +        return self
> +
>      def __iter__(self):
>          return self
>  
> @@ -131,3 +135,13 @@ class Packet(object):
>      def __str__(self):
>          return ', '.join(repr(protocol) for protocol in self.protocols)
>      __repr__ = __str__  # note: str(list) uses __repr__ for elements
> +
> +
> +# XXX: Hack for preventing recursive import
> +def _PacketBase__div__(self, trailer):
> +    pkt = Packet()
> +    pkt.add_protocol(self)
> +    pkt.add_protocol(trailer)
> +    return pkt
> +
> +packet_base.PacketBase.__div__ = _PacketBase__div__
> diff --git a/ryu/tests/unit/packet/test_packet.py 
> b/ryu/tests/unit/packet/test_packet.py
> index 8e70f46..03e036d 100644
> --- a/ryu/tests/unit/packet/test_packet.py
> +++ b/ryu/tests/unit/packet/test_packet.py
> @@ -41,6 +41,8 @@ class TestPacket(unittest.TestCase):
>      dst_ip = '192.168.128.10'
>      src_ip = '192.168.122.20'
>      dst_ip_bin = addrconv.ipv4.text_to_bin(dst_ip)
> +    src_port = 50001
> +    dst_port = 50002
>      src_ip_bin = addrconv.ipv4.text_to_bin(src_ip)
>      payload = '\x06\x06\x47\x50\x00\x00\x00\x00' \
>          + '\xcd\xc5\x00\x00\x00\x00\x00\x00' \
> @@ -712,3 +714,13 @@ class TestPacket(unittest.TestCase):
>  
>          eq_(pkt_str, str(pkt))
>          eq_(pkt_str, repr(pkt))
> +
> +    def test_div_api(self):
> +        e = ethernet.ethernet(self.dst_mac, self.src_mac, ether.ETH_TYPE_IP)
> +        i = ipv4.ipv4()
> +        u = udp.udp(self.src_port, self.dst_port)
> +        pkt = e/i/u
> +        ok_(isinstance(pkt, packet.Packet))
> +        ok_(isinstance(pkt.protocols[0], ethernet.ethernet))
> +        ok_(isinstance(pkt.protocols[1], ipv4.ipv4))
> +        ok_(isinstance(pkt.protocols[2], udp.udp))
> -- 
> 1.7.1
> 
> 
> ------------------------------------------------------------------------------
> Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
> Discover the easy way to master current and previous Microsoft technologies
> and advance your career. Get an incredible 1,500+ hours of step-by-step
> tutorial videos with LearnDevNow. Subscribe today and save!
> http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel

------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to