FlowForwarding / LINC-Switch

OpenFlow Software Switch written in Erlang
http://flowforwarding.org
Other
213 stars 80 forks source link

Using optical extensions in Mininet #363

Closed basus closed 9 years ago

basus commented 9 years ago

I noticed that there are files under the docs directory for using the optical extension and for working with Mininet. From what I can tell, the Mininet setup requires using a custom fork that adds a wrapper for LINC Switch, but it doesn't seem like there's support for the OE in that fork. Is there a standardized way of using the OE with Mininet? Are you planning on pushing your changes to Mininet upstream so that it becomes part of the standard distribution?

mentels commented 9 years ago

Hi,

Have a look on this tutorial: https://wiki.onosproject.org/display/ONOS/Packet+Optical+Tutorial

and consult this file if you need more details: https://github.com/opennetworkinglab/onos/blob/master/tools/test/topos/opticalUtils.py

Best regards,

On Tue, Jun 23, 2015 at 6:40 PM, Shrutarshi Basu notifications@github.com wrote:

I noticed that there are files under the docs directory for using the optical extension and for working with Mininet. From what I can tell, the Mininet setup requires using a custom fork that adds a wrapper for LINC Switch, but it doesn't seem like there's support for the OE in that fork. Is there a standardized way of using the OE with Mininet? Are you planning on pushing your changes to Mininet upstream so that it becomes part of the standard distribution?

— Reply to this email directly or view it on GitHub https://github.com/FlowForwarding/LINC-Switch/issues/363.

Szymon Mentel Erlang Solutions Ltd.

basus commented 9 years ago

Hi, I've been able to get the Mininet/Linc-OE combined network running. I'm trying to write my own OpenFlow controller to use the optical networking interface. Does Linc-OE implement the Optical Transport Protocol extension for 1.3 or is there some custom protocol for managing the optical capabilities?

sandhyan commented 9 years ago

Hi, You can find more details here: https://github.com/FlowForwarding/LINC-Switch/blob/internals-oe-doc/docs/LINC_internals.md#linc-oe-openflow-13-with-oe

basus commented 9 years ago

Thanks! It looks like what LincOE implements is close to, but not exactly the Optical Transport Protocol extension for 1.3. The examples in that document are all in Erlang, is it possible to use those features from an external controller using the standard OpenFlow controller-switch protocol?

sandhyan commented 9 years ago

The optical transport protocol extensions for 1.3 had not yet been published when LINC-OE was implemented. LINC-OE works with ONOS and Loom controller as they have implemented the experimenter messages described in the document.

mentels commented 9 years ago

@basus it is possible to use external controller but you need to understand the protocol changes that were made for Optical Extension. As you noticed, LINC-OE uses some customized protocol. If you don't understand Erlang, good starting point would be ONOS that acts as a controller and utilizes LINC-OE.

basus commented 9 years ago

Hi, I'm trying to write a LoxiGen input file based on the LoxiGen examples, and following the LINC-OE internals document. I'm having some trouble translating the structures that LINC-OE uses to LoxiGen input. I can translate the LINC-OE och_sigid structure as:

struct ofp_och_sigid { uint8_t grid_type; uint8_t channel_spacing; uint16_t channel_number; uint16_t spectral_width; };

But I'm not sure how to translate the action and match structures. I've started translating the action experimenter structure as:

struct of_action_linc_oe : of_action_experimenter { uint16_t type == 65535; uint16_t len; uint32_t experimenter == 0x748771; ??? };

but I don't know how to include the SetField action as part of it.

mentels commented 9 years ago

Have a look at the flow_mod_with_oe_fields_v2_test/0 in of_protocol tests for OE Extension. You can see there how the flom mod is constructed from Erlang records and what is expected its binary reprentaton (ExpectedBinary).

"Binary" is an Erlang type for raw bytes. It is simple - for example <<0,0,0,1>> represents for bytes with last byte set to 1. See more here.

basus commented 9 years ago

I managed to use the modified LoxiGen OpenFlow wrappers from the ONOS project to work with the LINC optical extensions. I have set a Mininet testbed and a custom control that can correctly use optical match and modification actions.