[Click] network load-balancer troubleshooting

Sunjeet Singh sstattla at gmail.com
Tue Dec 7 21:11:27 EST 2010


FromDevice(eth4, PROMISC true) -> Print -> 
StoreEtherAddress(is:an:on:ym:iz:ed, OFFSET dst) -> ToDevice(eth0, BURST 8);

- Should accept packet from eth4, print on terminal, modify MAC address 
of destination, send out through eth0?
- Gives me:
     â push output 0 connected to â pull input 0
     Router could not be initialized!
    Where am I wrong?

Thanks,
Sunjeet


On 10-12-07 5:56 PM, Roman Chertov wrote:
> On Tue, 07 Dec 2010 17:52:17 -0800 Sunjeet Singh<sstattla at gmail.com>  wrote
>
>> When I do a simple Click program-
>>
>> FromDevice(eth4, PROMISC true) ->  Print ->  Discard;
>>
>> it prints my regular traffic on eth4 but not the traffic that I am
>> sending on eth4 using tcpreplay. Does FromDevice only capture packets
>> that are destined to that interface and not packets that originate from
>> that interface?
> Yes.  FromDevice is used to capture only the incoming packets.  If you send
> packets via tcpreplay on the same box that runs click, click will not see those
> packets unless you use the FromHost element.
>
> Roman
>
>>
>> Thanks,
>> Sunjeet
>>
>>
>> On 10-12-07 5:36 PM, Roman Chertov wrote:
>>> 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