Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch from Openflow 1.0 to 1.3 #477

Open
silvia-anderson opened this issue Mar 14, 2016 · 3 comments
Open

Switch from Openflow 1.0 to 1.3 #477

silvia-anderson opened this issue Mar 14, 2016 · 3 comments

Comments

@silvia-anderson
Copy link

silvia-anderson commented Mar 14, 2016

  • Implement plugin architecure
  • Turn OpenFlow 1.0 infrastructure into a plugin, and test it
  • Turn OpenFlow 1.3 infrastructure into a plugin, and test it
@craig-riecke craig-riecke changed the title switch from openflow 1.0 to 1.3 Switch from Openflow 1.0 to 1.3 Jun 24, 2016
@craig-riecke
Copy link
Collaborator

So I'm running into a bunch of type safety issues using IPC with Sockets/Pipes. The problem child is Reader.read_marshall which blindly tries to unmarshall an Ocaml variable, and if the types are not present or unexpected in the catching code, it just segfaults. This is bad, and caused Issue #483 as well.

In an issue I opened with Jane Street, they're response was read_marshall is just an overall bad idea janestreet/async_unix#11, and suggested using bin_prot instead. This is now looking like a good idea. The problem is the IPC protocols we've built have little or no documentation, and this would force us to document them.

@craig-riecke
Copy link
Collaborator

Well scratch that. Using bin_prot quickly descended into static checking hell - basically having to add [@@deriving bin_prot] into every type in Frenetic. It wasn't bad until we hit the opaque types that Frenetic punts on - in particular Packet In and Packet Out which take packet data. These are of type Cstruct.t and you can't apply bin_prot to that type because you end up creating type aliases for all the subtypes, and end up with a shadow type system for all of Cstruct. Yuck.

@craig-riecke
Copy link
Collaborator

Pull request #512 established plugin architecture. So now the only thing that's left is:

  • Rewrite frenetic/openflow.ml to send OpenFlow 1.3 messages to switch. (by a command switch? by writing an entirely separate openflow13.ml executable?)
  • Morph async/frenetic_openflow0x04_plugin to match new plugin architecture signature
  • Create a mechanism to choose Openflow 1.0 or 1.3 (command line switch? discovery?)

@craig-riecke craig-riecke removed their assignment Jul 22, 2016
@jnfoster jnfoster reopened this Dec 14, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants