Skip to content

Conversation

@MurphyMc
Copy link

I'm not sure if you care anymore, Brandon, but this is a quick pass at getting riplpox working on recent versions of POX. A quick test indicates that the POX/riplpox part seems to work now, though it appears there are incompatibilities with current versions of Mininet. And, for that matter, with the cs244 branch?

With current Mininet, proactive didn't work. I didn't look into this very far and instead tried the cs244 branch.

With the cs244 branch, I had to tweak some function names (addSwitch vs. add_switch, etc.) to get ripl to start, but then proactive mode seemed to work.

The old code used -1 for empty buffer IDs.  We now use None.
The canonical format for ethernet addresses in POX is EthAddrs.  We
shouldn't convert them to raw unnecessarily.
EthAddr.toInt() was removed, but riplpox uses the MAC-to-Mininet-name
relationship, at least for catching unexpected source/destinations.
(If that's all it uses them for, it's possible it should log them as
warnings instead of raising an exception...)
I think when EthAddr.toInt() was removed, so was initializing from an int.
This adds a helper to address the situation.
@brandonheller
Copy link
Owner

Nice, Murphy! Hopefully people will find this useful. It's been so long that I don't even recall the last version of Mininet this was tested with.

@MurphyMc
Copy link
Author

Just a note that commit MurphyMc/riplpox@c4d9272 in this PR addresses the main issue of #4 (-1 is not the correct value to represent NO_BUFFER) in the correct way for current versions of POX.

@trungpv92
Copy link

Hi MurphyMc,

I am writing a module for POX. This function is getting parameters from a dict :
dict = {'srcMac' : str[0], 'dstMac' : str[1], 'srcIP' : str[2], 'dstIP' : str[3], 'srcPort' : int(str[4]), 'dstPort' : int(str[5]), 'ingressPort' : int(str[6]), 'vlan' : int(str[7]), 'dlType' : 0x800, 'netProtocol' : int(str[9]), 'tosBits' : int(str[10]), 'wildcards' : int(str[11]), 'hardTimeout' : int(str[12]), 'idleTimeout' : int(str[13]), 'Output' : int(str[14]), 'priority' : int(str[15]), 'cookie' : int(str[16]) }

Then, I use ( code below) to send to switch a flowmod, but the result is different, all entries table are dropped. I cant understand and explain why. If you have done it before, please instruct me to resolve this problem. thanks
msg = of.ofp_flow_mod()

    msg.match.tp_src = dict['srcPort']
    msg.match.tp_dst = dict['dstPort']
    msg.match.dl_src = dict['srcMac']
    msg.match.dl_dst = dict['dstMac']
    msg.match.nw_src = dict['srcIP']
    msg.match.nw_dst = dict['dstIP']
    msg.match.in_port = dict['ingressPort']
    msg.match.dl_vlan = dict['vlan']
    msg.match.nw_proto = dict['netProtocol']
    msg.match.nw_tos = dict['tosBits']

    msg.idle_timeout = dict['idleTimeout']
    msg.hard_timeout = dict['hardTimeout']
    msg.priority = dict['priority']

    msg.actions.append(of.ofp_action_output(port = 1000))
    msg = of.ofp_flow_mod(command = of.OFPFC_MODIFY)

    for connection in core.openflow._connections.values():
            connection.send(msg)

@hebahelal
Copy link

Please, I need help .
I built fat tree topology with k=4 using ripl pox controller and I found this problem
AttributeError: 'FatTreeTopo' object has no attribute 'addSwitch'

How can I solve it?
I appreciate your help
Thank you

@Huangmachi
Copy link

Help! Both the ripl-poxs do not work.
Is it the problem of the version of mininet?
Or only my misstake?

@MurphyMc
Copy link
Author

@Huangmachi I think it's impossible to say without more information.

@lbc001
Copy link

lbc001 commented Dec 20, 2016

Hi~i have fixed this problem...check this page :http://mininet.org/api/classmininet_1_1topo_1_1Topo.html
and change the /rip;/ripl/dctopo.py add_switch to addSwitch etc.Have a nice day on cs244.XD

@humikahout
Copy link

hello after adding the flow in pox controller i found error in core: exception while handling discovery link event. i am also attaching the screen shot in description.
b0f1ca01-fa05-4ca3-b9c6-e5ffa6123572

@MurphyMc
Copy link
Author

MurphyMc commented Aug 9, 2017

@humikahout It looks to me like your issue is unrelated to this pull request. It looks like you're using a POX component that isn't part of the standard POX distribution nor part of riplpox (ext/bellmanford.py), and that your problem is with that. I'd suggest that you contact the author of that component for support.

@humikahout
Copy link

@MurphyMc i write Dijkstra’s algorithm code according to my mininet topology but i don’t know where i post in pox code file (l2_learning file)
i am also adding the screenshoot of my code kindly help me to resolve to this issue thanks
111
222

@MurphyMc
Copy link
Author

You need more than just shortest paths between nodes. At the minimum, you also need a scheme for mapping packet addresses to nodes. And then you need to actually install table entries.

POX's pox/forwarding directory has a couple examples of different ways to do this (l2_multi, topo_proactive). You should try to read and understand those. A complicating factor is that they also assume the topology needs be learned instead of being given to it, though they just rely on the discovery component for that.

It may help to start by trying to understand the simpler forwarding components first (e.g., l2_pairs). The POX manual may be very helpful too.

When you run into trouble, you might look for help on some OpenFlow community website or mailing list (e.g., the openflow-discuss list), or at least on the actual POX github repository instead of here on this bug since your questions aren't related to this bug or riplpox.

Good luck.

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

Successfully merging this pull request may close these issues.

7 participants