test: add unittests for packet library

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
ryu/lib/ofctl_v1_0: introduce OF interface

This patch provides the raw OF interface. We can talk with a switch
by using the OF interface via some protocols such as REST.

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
ryu/app/ofctl_rest: implements ofctl_rest app

This patch implements REST API for accessing state. This module helps
your debugging and retrieving various statistics. It also supports
flow entry pusher to allow users to manually insert flows into switch.

- get all switch DPIDs connected to the controller
 $ curl http://<controller_ip>:8080/stats/switches

- get the desc stats
 $ curl http://<controller_ip>:8080/stats/desc/<dpid>

- get flows stats
 $ curl http://<controller_ip>:8080/stats/flow/<dpid>

- get ports stats
 $ curl http://<controller_ip>:8080/stats/port/<dpid>

- add a flow entry
 $ curl -d '{"dpid": "1", "cookie":"0", "priority":"32768", \
   "actions":[{"port":2, "type":"OUTPUT"}], "match":{"in_port":1}}' \
   http://<controller_ip>:8080/stats/flowentry

- delete all flows of the switch
 $ curl -X DELETE \
   http://<controller_ip>:8080/stats/flowentry/clear/<dpid>

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Ryu 1.4

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
packet lib: remove unnecessary ICMP debug message

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: Fix OFPActionExperimenter parser

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
prepare contrib directory which holds third party library

- create ryu/contrib directory
- adjust module load path for third party library and prioritize our own copy
  than system's
- teach ryu-manager ryu/contrib
- run_tests.sh: exclude contrib dir for pep8
  third party files will be included under ryu/contrib.
  Third party files aren't suitable to our pep8 check because they aren't under
  our control.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
import ovs python binding library

From changeset 8087f5ff825cae3a699e5a60ca6dd0deb10fc8e5
dirs.py.template needs to be adopted for Ryu environment.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
contrib/ovs/dirs: replace @variables@ which is replaced by configure

Normally dirs.py is created from dirs.py.template by configure script.
Create it manually for our own copy.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
wsgi/routes: add regex pattern for each REST component

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
ofctl_v1_0: update get_flow_stats() to dump actions

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
don't use select.POLL* constants

MacOS doesn't have POLL* constants (poll isn't supported by all OSes,
I guess).

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: Fix MTVlanVid() parser and serializer

- The OFPVID_PRESENT bit indicate the presence of a valid VLAN_ID.
- Reflect to unittests.

Signed-off-by: HIYAMA Manabu <hiyama.manabu@po.ntts.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
add TLS support

This patch supports TLS connection to encrypt OF channel.

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
packet lib: add arp constants

Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.2: fix some error constant typos

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
contrib/ovs: TypeError: bad operand type for unary -: 'NoneType'

This fixes the following exception:
When Stream.__scs_connecting doesn't change self.state, Stream.connect()
returns None as implicit return value. Thus, the following exception is raised.

conf_switch_set_handler 00003247b5e63145 ovsdb_addr tcp:172.17.60.198:6634
_ovsdb_update 00003247b5e63145 tcp:172.17.60.198:6634 172.17.60.198
_add_tunnel_ports <ryu.app.tunnel_port_updater.TunnelDP object at 0x14a5950> set([])
172.17.60.198 - - [2012-11-21 15:01:00] "PUT /v1.0/conf/switches/00003247b5e63145/ovsdb_addr HTTP/1.1" 201 120 0.267351
remote tcp:172.17.60.198:6634
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/gevent/greenlet.py", line 390, in run
    result = self._run(*self.args, **self.kwargs)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/app/tunnel_port_updater.py", line 289, in _serve_loop
    self._init()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/app/tunnel_port_updater.py", line 125, in _init
    self.ovs_bridge.init()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 103, in init
    self.br_name = self._get_bridge_name()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 111, in _get_bridge_name
    self.run_command([command])
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/bridge.py", line 99, in run_command
    self.vsctl.run_command(commands, self.timeout, self.exception)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 1006, in run_command
    self._run_command(commands)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 999, in _run_command
    self._do_main(commands)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 918, in _do_main
    self._init_schema_helper()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 805, in _init_schema_helper
    vswitch_idl.OVSREC_DB_NAME)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/lib/ovs/vsctl.py", line 793, in _rpc_get_schema_json
    error, reply = rpc.transact_block(request)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 306, in transact_block
    error = self.send(request)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 240, in send
    self.run()
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/jsonrpc.py", line 200, in run
    retval = self.stream.send(self.output)
  File "/home/yamahata/openvswitch/sp-lab/scarab/gre-tunnel/ryu-2/bin/ryu/contrib/ovs/stream.py", line 213, in send
    return -retval
TypeError: bad operand type for unary -: 'NoneType'
<Greenlet at 0x133fd10: <bound method TunnelDP._serve_loop of <ryu.app.tunnel_port_updater.TunnelDP object at 0x14a5950>>> failed with TypeError

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.3: fix OFP_OXM_EXPERIMENTER_HEADER_SIZE assert

File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 233, in <module>
  OFP_OXM_EXPERIMENTER_HEADER_SIZE) == OFP_OXM_EXPERIMENTER_HEADER_SIZE

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.3: fix OFP_TABLE_MOD_PACK_STR assert

File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 383, in <module>
  assert (calcsize(OFP_TABLE_MOD_PACK_STR + OFP_HEADER_SIZE) ==
TypeError: cannot concatenate 'str' and 'int' objects

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
of1.3: fix OFP_METER_BAND_DSCP_REMARK_PACK_STR assert

File "/Users/fujita/git/ryu/ryu/ofproto/ofproto_v1_3.py", line 480, in <module>
  OFP_METER_BAND_DSCP_REMARK_SIZE)
AssertionError

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