On Thu, 19 Jul 2018 07:34:36 +0900, Thomas William wrote: > > [1 <multipart/alternative (7bit)>] > [1.1 <text/plain; UTF-8 (7bit)>] > Hello, I've been having a problem for days, I can not capture tcp packets > with the controller. > My topology is below: > > +---------------------------+ > | | > | C0 - Controller | > | | > +-------------+-------------+ > c0-eth0 > | > | > +-+--+--+-+ +-+--+--+ > | Switch | ---------------- | H2 | > +-+--+--+-+ +-+--+--+ > | > | > s1-eth0.2 > +-------------+-------------+------+ > | | > | S1 - OpenFlow AP | > | | > | | > +-+----------+----------+---+ > s1-eth0.1 > + > | > | > v > h1-eth0 > +-+--+ > | H1 | > +-+--+ > > I want to modify tcp packets sent by server h1 to another h2 server > connected to the common switch, but when I print the packages, there is no > tcp package, just other types of packages like udp, dhcp, igmp, ipv4, ipv6. I > have no idea why, I'd like the opinion of you. > > My code is below, just an example to test here: > > from ryu.base import app_manager > # from ryu.ofproto import ofproto_v1_0 > from ryu.ofproto import ofproto_v1_5 > from ryu.lib.packet import packet > from ryu.lib.packet import ethernet > from ryu.lib.packet import ipv4 > from ryu.lib.packet import tcp > from ryu.controller import ofp_event > from ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHER > from ryu.controller.handler import set_ev_cls > from ryu.topology import event > > #iperf tcp example > > class L2Forwarding(app_manager.RyuApp): > # OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION] > OFP_VERSIONS = [ofproto_v1_5.OFP_VERSION] > > def __init__(self, *args, **kwargs): > super(L2Forwarding, self).__init__(*args, **kwargs) > > @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) > def switch_features_handler(self, ev): > datapath = ev.msg.datapath > ofproto = datapath.ofproto > parser = datapath.ofproto_parser > print("install the table-miss flow entry") > # install the table-miss flow entry. > match = parser.OFPMatch() > actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, > ofproto.OFPCML_NO_BUFFER)] > self.add_flow(datapath, 0, match, actions) > > def add_flow(self, datapath, priority, match, actions): > ofproto = datapath.ofproto > parser = datapath.ofproto_parser > print("construct flow_mod message and send it") > # construct flow_mod message and send it. > inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, > actions)] > mod = parser.OFPFlowMod(datapath=datapath, priority=priority, > match=match, instructions=inst) > datapath.send_msg(mod) > > > @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) > def packet_in_handler(self, ev): > msg = ev.msg # Object representing a packet_in data > structure. > datapath = msg.datapath # Switch Datapath ID > ofproto = datapath.ofproto # OpenFlow Protocol version the entities > negotiated. In our case OF1.3 > parser = datapath.ofproto_parser > out_port = ofproto.OFPP_LOCAL > in_port = ofproto.OFPP_LOCAL > > pkt = packet.Packet(msg.data) > eth = pkt.get_protocol(ethernet.ethernet) > > dst = eth.dst > src = eth.src > > print(pkt.get_protocol) > > self.logger.info("packet in %s %s", src, dst) > > v4 = pkt.get_protocol(ipv4.ipv4) > if v4: > print("IPV4: %s ==> %s " % (v4.src, v4.dst)) > > server_ip = v4.dst > in_port = msg.match['in_port'] > > if pkt.get_protocol(tcp.tcp):
You are discarding tcp packet data here. You'd want to: pkt_tcp = pkt.get_protocol(tcp.tcp) if pkt_tcp: src_port = pkt_tcp.src_port > src_port = pkt.src_port > print("TCP GET %s", "=" * 100) > > #Match in protocol tcp "in_proto=6" and ipv4 > "eth_type=0x0800" > match_tcp = parser.OFPMatch(in_port=in_port, > eth_type=0x0800, ip_proto=6, tcp_flags=0x010, ipv4_dst=server_ip, > tcp_src=src_port) > actions = > [datapath.ofproto_parser.OFPActionOutput(out_port)] > > self.add_flow(datapath, 1, match_tcp, actions) -- IWAMOTO Toshihiro ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel