[Click] network load-balancer troubleshooting

Roman Chertov rchertov at cs.ucsb.edu
Tue Dec 7 20:36:24 EST 2010


On Tue, 07 Dec 2010 17:30:07 -0800 Sunjeet Singh <sstattla at gmail.com> wrote

> > You can do something like this.
> >
> > my_switch[0] ->  Print(1) ->  ...
> > my_switch[1] ->  Print(2) ->  ...
> > my_switch[2] ->  Print(3) ->  ...
> >
> 
> This doesn't print the packets that I am sending to eth4. Are the
> packets getting discarded before they are reaching Click? Or are they
> returning a value that is not in the my_switch[0] to my_switch[2] range?

You can put a Print element like this to see what is going on.

FromDevice(eth4, PROMISC true) -> Print -> my_switch;

> 
> > Also, you need to strip the original Ethernet header first.  Otherwise, you
> > are
> > just encapsulating an Ethernet frame inside another Ethernet frame.  So you
> > would want to place a Strip(14) after my_switch[x].
> 
> I need to modify the MAC address fields (only) of the existing packets
> and send them. How should I go about doing that?

http://read.cs.ucla.edu/click/elements/storeetheraddress

Roman

> 
> > My favorite debugging method is using a Tee.
> >
> > path ->  t :: Tee ->  ...
> >
> > t[1] ->  ToHostSniffers(ethX);
> >
> > and then you can just run tcpdump/wireshark to see what packets are on the
> > path
> > (assuming you have Ethernet packets).
> 
> I will look into this, thank you.
> 
> 
> Thanks for your help!
> Sunjeet
> 
> 
> > Roman
> >
> >
> > On Tue, 07 Dec 2010 14:38:28 -0800 Sunjeet Singh<sstattla at gmail.com>  wrote
> >
> >> Can someone please help me troubleshoot?
> >>
> >> On Linux, I'm trying to configure a load-balancer that sits in front of
> >> a cluster, receives all packets destined to that cluster, calculates a
> >> hash of some fields of the packet using HashSwitch() to decide which
> >> worker machine in the cluster to send that packet to, and finally then
> >> forwards that packet to that worker machine by rewriting the MAC Address
> >> field of that packet.
> >>
> >> Here's what my click script looks like (currently testing with one
> >> frontend machine and one worker machine)-
> >>
> >> AddressInfo(mymac<IP add. of frontend/8>  <mac add of eth0>);
> >> AddressInfo(worker1<IP add. of worker1/8>  <mac add of worker eth0>);
> >> AddressInfo(worker2<IP add. of worker1/8>  <mac add of eth1>);
> >> AddressInfo(worker3<IP add. of worker1/8>  <mac add of eth2>);
> >>
> >> my_switch :: HashSwitch(26, 8);
> >>
> >> FromDevice(eth4, PROMISC true) ->  my_switch;
> >> todevice1 :: ToDevice(eth0);
> >> todevice2 :: ToDevice(eth1);
> >> todevice3 :: ToDevice(eth2);
> >>
> >> my_switch[0] ->  EtherEncap(0x0800, mymac, worker1) ->  Queue -> 
> >> todevice1;
> >> my_switch[1] ->  EtherEncap(0x0800, mymac, worker2) ->  Queue -> 
> >> todevice2;
> >> my_switch[2] ->  EtherEncap(0x0800, mymac, worker3) ->  Queue -> 
> >> todevice3;
> >>
> >>
> >> When I run the script with the command "sudo click try.click", it starts
> >> executing and gives no messages. To test it,
> >> I used tcpdump to first see if any of the interfaces on worker1 is
> >> receiving any traffic ->  No.
> >> Then I checked if any traffic is going out of eth0, eth1 or eth2 on
> >> frontend ->  No.
> >> Checked if eth4 is receiving the packets I sent through tcpreplay ->  Yes.
> >>
> >> How can I go about debugging this? I will greatly appreciate any help in
> >> this regard.
> >>
> >> Thank you,
> >> Sunjeet Singh
> >>
> >>
> >> _______________________________________________
> >> click mailing list
> >> click at amsterdam.lcs.mit.edu
> >> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> >
> > _______________________________________________
> > click mailing list
> > click at amsterdam.lcs.mit.edu
> > https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> 
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click




More information about the click mailing list