OpenSolaris

Printable Version Enter a New Search
Bug ID 4509788
Synopsis IPMP's usage of interface flags is not backward compatible
State 10-Fix Delivered (Fix available in build)
Category:Subcategory network:ipmp
Keywords clearview
Responsible Engineer Peter Memishian
Reported Against s81_47
Duplicate Of
Introduced In solaris_9
Commit to Fix snv_107
Fixed In snv_107
Release Fixed solaris_nevada(snv_107)
Related Bugs 4509869 , 4710499 , 6783149 , 6783150 , 6783151 , 6783152 , 6783153
Submit Date 2-October-2001
Last Update Date 28-January-2009
Description
IPMP's usage of interface flags is not backward-compatible.  It breaks existing 
routing socket applications.  The problem is that there are interfaces
(the "test address" interfaces) that are marked with IFF_UP, but are not
available for general use.  Since applications can't be generally expected to
know about the new flags (IFF_DEPRECATED and IFF_INACTIVE, in particular),
this means that existing applications will learn about these interfaces via
SIOCGLIFCONF, notice that they are marked with IFF_UP, consider these to
be valid interfaces, and will misinterpret the state of the system.

This affects at least GateD and the public sources for DHCP, and likely affects 
other third-party applications as well.  Given a scenario where hme0 and hme0:1
(this is the test address interface with IFF_DEPRECATED marked), applications like public-domain
GateD ( see krt_ifread_v4() in gated-public-3_6/src/krt_os/krt_ifread_ioctl.ckrt_ifread_v4())
treats aliases as separately configured IP addresses on a single if_link (physical interface).
They will advertise each one as a separate
attachment into the subnet (for protocols that care about such
things). When the 'primary' goes down for any reason, the routing
daemon will pick up any still-up IP interface and use that, 
including hme0:1.  It doesn't know any better,
and shouldn't.  There's nothing about "hme0:1" that says "don't use
this if hme0 is down. GateD and most other existing applications dont look at IFF_RUNNING flags
Work Around
Sun owned routing daemon implementations, that are currently under
development,  like RIPv2,  have added code to ignore interfaces that are
marked with IFF_DEPRECATED, IFF_STANDBY or/and IFF_INACTIVE even if these interfaces
are marked with IFF_UP in order to function as per RIPv2 RFC. with IPMP enabled. 

There is no workaround for public-domain daemon implementations running
on Solaris with IPMP enabled.   
Comments
[ Moved from Suggested Fix field ]

There have been some discussion on this issue, and currently there are 3 contending cadidate solutions:

1. Have a virtual list of interfaces.  IPMP would then export the real interfaces
in the group as though they were interface aliases through this interface.

2. Do not report test address interfaces to apps via SIOCGLIFCONF. If there are
apps that need to know this, they can use some other newly created ioctl to
get these interfaces and the test addresses.

3. Have a new mechanism that allows in.mpathd to  ping over interfaces that are
marked as ~IFF_UP.  This would allow in.mpathd to do its testing without
having the interface table lie to anyone -- we would see just the primary
interfaces (no aliases) coming and going as failures and recoveries are seen.

NOTE: Solution 2 will only serve to fix this bug but not BugID 4509869
*** (#1 of 1): 2004-06-10 20:31:45 EDT defect-conversion- xxxxx@xxxxx.com
"Fix affects docs" has been checked because the fix to this involves
adding new lifc_flags and socket options.  The associated manpage
changes are part of the larger set of manpage changes for 6783149.