[Click] network load-balancer troubleshooting
Sunjeet Singh
sstattla at gmail.com
Tue Dec 7 20:30:07 EST 2010
> 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?
> 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?
> 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
More information about the click
mailing list