On 01/12/2015 01:59 PM, Ben Greear wrote:
> On 01/12/2015 11:48 AM, Mike Christie wrote:
>> > On 1/12/15, 1:29 PM, Ben Greear wrote:
>>> >> On 01/12/2015 11:22 AM, Mike Christie wrote:
>>>> >>> On 1/9/15, 8:28 PM, Thomas Dwyer III wrote:
>>>>> >>>> Hi folks,
>>>>> >>>>
>>>>> >>>> I spent some time browsing through this forum but I was unable to 
>>>>> >>>> find an
>>>>> >>>> explanation for this comment referring to the disabled 
>>>>> >>>> bind_src_by_address()
>>>>> >>>> function in io.c:
>>>>> >>>>
>>>>> >>>> *This is not supported for now, because it is not exactly what we 
>>>>> >>>> want.*
>>>>> >>>> *It also turns out that targets will send packets to other 
>>>>> >>>> interfaces*
>>>>> >>>> *causing all types of weird things to happen.*
>>>>> >>>>
>>>>> >>>> I found several posts from people referring to this specific comment 
>>>>> >>>> but I
>>>>> >>>> did not find an explanation. Is it possible that the author of this 
>>>>> >>>> comment
>>>>> >>>> was referring to the ARP flux issue, which may cause a target to 
>>>>> >>>> associate
>>>>> >>>> the bound IP address with the MAC address from an interface other 
>>>>> >>>> than the
>>>>> >>>> one specified with SO_BINDTODEVICE? If so, I don't see how avoiding 
>>>>> >>>> the
>>>>> >>>> call to bind() solves this problem. I would appreciate a reply from 
>>>>> >>>> anyone
>>>>> >>>> who might know what "weird things" means in this context.
>>>>> >>>>
>>>> >>>
>>>> >>> bind_src_by_address() only did a bind() and was expecting all traffic 
>>>> >>> to flow through the interface with the specified ip address. If you 
>>>> >>> have multiple
>>>> >>> interfaces on the same subnet, the network layer would send/recv on 
>>>> >>> any of them. This ended up causing issues with packets not getting 
>>>> >>> sent/received or received
>>>> >>> in incorrect orders to the iscsi layers on the initiator/target side.
>>> >>
>>> >> If you add additional routing logic based on source-addresses, then this 
>>> >> method will indeed
>>> >> bind to a particular interface, so please leave that logic in place.
>> > 
>> > The basic problem, people wanted to solved was the case where they have 
>> > multiple interfaces on the same subnet. They then wanted to be able to 
>> > create iscsi
>> > connections/sessions through all those interfaces and have the multipath 
>> > layer round robin over them. If you just tried to do bind() the network 
>> > layer would
>> > send/recv over any of the interfaces on the same subnet.
>> > 
>> > What additional logic can you add to make this work on a per connection 
>> > basis? I have seen where you can manually manipulate the routing table to 
>> > send all
>> > traffic through specific nics, but not where I can control it on per 
>> > connection level.
> We use arp-filtering, and source-based routing using multiple routing tables.
> 
> So, for instance, any pkt from 1.2.3.4 will route through eth7 based on 
> routing
> table rules.  Then, if application binds to 1.2.3.4 for sending, it will 
> automatically
> route out of eth7 regardless of any other interfaces or IP address 
> configuration.
> 
> arp-filtering will make sure only eth7's MAC will be used as ARP response for
> 1.2.3.4.

Thanks for the info.

Thomas, let me know if your question was for functionality you needed or
just looking through the code and were curious.

-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To post to this group, send email to open-iscsi@googlegroups.com.
Visit this group at http://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to