of1.2: fix vlan_vid match

Fix the following error:

  File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_2_parser.py",
  line 1501, in serialize
    self.append_field(header, self.flow.vlan_vid, self.vlan_vid_mask)
AttributeError: 'OFPMatch' object has no attribute 'vlan_vid_mask'

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: fix OFPActionSetField padding

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: fix OFPActionPopVlan parser

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: fix MTIPv6NdTarget

AttributeError: 'MTIPv6NdTarget' object has no attribute 'mask

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: fix OFPPacketIn parser

We need two bytes padding right after the match.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: OFPSetField serializer pads too much

The calculation of padding size was wrong. Calculate correct padding size.

Following the sample frame.

0000  00 23 5d 76 13 c2 00 26  b9 76 5c 81 08 00 45 00
0010  00 a4 43 8b 40 00 40 06  5e c0 ac 10 03 21 ac 11
0020  3c c6 19 e9 ae 7a 18 cf  dd ef d7 26 45 ec 80 18
0030  00 7a 98 9f 00 00 01 01  08 0a 50 db 9e 5e 01 30
0040  7e 3d

            03 0e 00 70 e4 f7  ea 88
            Start of OF packet

                                     00 00 00 00 00 00
0050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0060  00 00 ff ff ff ff ff ff  ff ff ff ff ff ff 00 00
                                                 flags

0070  00 00
      pad

            00 01 00 0c 80 00  00 04 00 00 00 01 00 00
            type  len   oxm_header   value
            ofp_match   in_port
            Start of matching
                        Start of OXM TLV

0080  00 00

            00 04 00 30 00 00  00 00
            type  len   pad[4]
            apply_actions
            start of instruction

                                     00 19 00 18
                                     type  len
                                     start of set_field

                                                 80 00
                                                 oxm_header
                                                 oxm class
0090  08 06
      ETH_SRC

            22 22 22 22 22 22  00 00
                                      00 00 00 00 00 00
                                      <--Wrong padding-
00a0  00 00
      ---->
             00 00 00 10 00 00  00 02 05 dc 00 00 00 00
             type  len   port         maxlen
             start of ofp_action_output

00b0  00 00

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Reviewed-by: Simon Horman <horms@verge.net.au>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: fix OFPGroupMod serialize

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Reviewed-by: Simon Horman <horms@verge.net.au>
nxm: fix nxm to OFPMatch conversion

This fixes a bug that the conversion ignores dl_dst.

Soheil Hassas Yeganeh reported a problem about simple_isolation:

The problem is that the isolation service tries to install
flow-entries for a specific src and dst (in
SimpleIsolation._modflow_and_send_packet), but instead the nx match
code installs flow-entries only with src addresses and ignores the
dst.  So, when I boot multiple vms, only one of them is reachable.

For instance, assume that you have two VM's A and B. When a packet
comes from the gw to A, it installs "gw->A: A's port", but the acutal
installed rule is "gw: A's port". This works for A, but, when you boot
B, it tries to install "gw->B: B's port", but the acutal rule to be
installed is "gw: B's port".  So, it always connect the gateway to
only one VM at a time.

Reported-by: Soheil Hassas Yeganeh <soheil@cs.toronto.edu>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Reviewed-by: Soheil Hassas Yeganeh <soheil@cs.toronto.edu>
of1.2: add OFPQueuePropMinRate and OFPQueuePropMaxRate

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
enable applications to specify OF versions

Some applications need to use particular OF versions.

With this patch, applications can specify OF versions in the following
way:

class YourApplication(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_1.OFP_VERSION, ofproto_v1_2.OFP_VERSION]

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Reviewed-by: Isaku Yamahata <yamahata@valinux.co.jp>
of1.2: remove unused mask in MTEthType

EthType doesn't support mask.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: add OFPSF_REPLY_MORE constant

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
simple_switch: fix port_status_handler

port_no is not a member of msg, but a member of msg.desc.

Signed-off-by: Hiroaki KAWAI <kawai@stratosphere.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: OFPMatch serialiser: fix ARP_SPA, ARP_TPA and IPV6_FLABEL masking

* In the case of ARP_SPA, ARP_TPA and IPV6_FLABEL a masked match should be
  used unless the mask is all ones.

  Previously a non-masked matched was used in the case were the mask was
  zero, leading to the value being unmasked, whereas in should be completely
  masked out.

* An un-masked IPV6_FLABEL should internally use a mask of UINT32_MAX

Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
nxm: remove import ofproto

Use ofproto_v1_0 explicitly instead.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
stop import ofproto_v1_0 as ofproto

'from . import ofproto_v1_0 as ofproto' in ryu/ofproto/__init__.py is
a wrong assumption. We need to remove it.

This introduces ryu/ofproto/ofproto_common.py including only constatns
that OF version independent code must use. Note that I don't move data
structures there that multiple OF versions can share (like OVS does).

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
simple_switch: specify OF1.0

simple_switch works with only OF1.0 and OF1.0 provides all
simple_switch needs. So specify OF1.0.

simple_switch doesn't need nxm so use OFPMatch and OFPFlowMod (and
avoid the helper functions).

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
cbench: specify OF1.0

cbench works with only OF1.0 and OF1.0 provides all cbench needs. So
specify OF1.0.

Also it doesn't need nxm so use OFPMatch and OFPFlowMod.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Reviewed-by: Isaku Yamahata <yamahata@valinux.co.jp>
simple_switch: remove outside module dependence

simple_switch is a a learing material (who uses this in
production?). It should be the simple learning switch code like one in
OpenFlow tutorial. It's easier for learniners if simple_switch doesn't
use the outside modules.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: OFPGroupMod and OFPGroupFeaturesStats

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>