Thanks, KK & Varghese. I will try that out. -Chitra
On Thu, Oct 29, 2009 at 12:40 PM, Varghese Mathew <[email protected]>wrote: > Hi Chitra, > > this is what I understand > (this code snippet is from the unmodified hub.cc file) > > ofp_flow_mod* ofm; > size_t size = sizeof *ofm + *sizeof(ofp_action_output); *//* #1:*make > this <N> * sizeof(ofp_action_output) > boost::shared_array<char> raw_of(new char[size]); > ofm = (ofp_flow_mod*) raw_of.get(); > > ofm->header.version = OFP_VERSION; > ofm->header.type = OFPT_FLOW_MOD; > ofm->header.length = htons(size); > ofm->match.wildcards = htonl(0); > ofm->match.in_port = htons(flow.in_port); > ofm->match.dl_vlan = flow.dl_vlan; > memcpy(ofm->match.dl_src, flow.dl_src.octet, sizeof > ofm->match.dl_src); > memcpy(ofm->match.dl_dst, flow.dl_dst.octet, sizeof > ofm->match.dl_dst); > ofm->match.dl_type = flow.dl_type; > ofm->match.nw_src = flow.nw_src; > ofm->match.nw_dst = flow.nw_dst; > ofm->match.nw_proto = flow.nw_proto; > ofm->match.tp_src = flow.tp_src; > ofm->match.tp_dst = flow.tp_dst; > ofm->command = htons(OFPFC_ADD); > ofm->buffer_id = htonl(buffer_id); > ofm->idle_timeout = htons(5); > ofm->hard_timeout = htons(5); > ofm->priority = htons(OFP_DEFAULT_PRIORITY); > ofm->reserved = htons(0); > *ofp_action_output& action = *((ofp_action_output*)ofm->actions); > /* change the above line to the one below.. > * the idea is, pointers are arrays.. so now you can refer to each > of > * your action as action[0] ... action[N-1] > * once you make the change > */ // change #2** > * *ofp_action_output* action = ((ofp_action_output*)ofm->actions);* > memset(&action, 0, *<N> * *sizeof(ofp_action_output)); *// change > #3* > action.type = htons(OFPAT_OUTPUT); *// > action[i].type change #4* > action.len = htons(sizeof(ofp_action_output)); *// > action[i].len* > action.port = htons(OFPP_FLOOD); *// > action[i].port* > action.max_len = htons(0); *// > action[i].max_len* > send_openflow_command(pi.datapath_id, &ofm->header, true); > > HTH > /varghese > > Chitra Muthukrishnan wrote: > > Hi, > In most of the examples that I see, the controller sends an ofp_flow_mod > instructing the switch to take 1 action for a rule. > I am wondering how to specify 2 actions for a rule. Do we just send two > messages- 1 for each action? > Or is there some other message format to specify 2 actions for a match? > > -Chitra > > > On Thu, Oct 29, 2009 at 10:46 AM, kk yap <[email protected]> wrote: > >> Hi Chitra, >> >> You have to construct a ofp_flow_mod message (specified in openflow.h) >> and send it to the switch. In NOX, I typically use a boost shared >> array to hold the message, then it is just a send_openflow_command. I >> cannot find a very clean segment of code, but you can look at >> routing.cc for try to follow through it. >> >> Regards >> KK >> >> 2009/10/29 Chitra Muthukrishnan <[email protected]>: >> > I believe the controller can specify many actions to be taken for a >> matching >> > packet. >> > I need a switch to send some packets to the controller and forward it to >> an >> > output port. >> > Can someone tell me how we can construct such rules with nox? >> > >> > -Chitra >> > >> > _______________________________________________ >> > nox-dev mailing list >> > [email protected] >> > http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org >> > >> > >> > > ------------------------------ > > _______________________________________________ > nox-dev mailing > [email protected]http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org > >
_______________________________________________ nox-dev mailing list [email protected] http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org
