Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=303065a8545bf7524550bd9564afb48e8a685a2d
Commit:     303065a8545bf7524550bd9564afb48e8a685a2d
Parent:     c1ee656ccb3b03304d38f852debccdd1567702e6
Author:     YOSHIFUJI Hideaki <[EMAIL PROTECTED]>
AuthorDate: Wed Nov 14 15:56:15 2007 +0900
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 14:53:57 2008 -0800

    [IPV6] ADDRCONF: Allow address selection policy with ifindex.
    
    This patch allows ifindex to be a key for address selection policy table.
    
    Signed-off-by: YOSHIFUJI Hideaki <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ipv6/addrconf.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 733374b..e1e591b 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -875,7 +875,8 @@ static inline int ipv6_saddr_preferred(int type)
 }
 
 /* static matching label */
-static inline int ipv6_addr_label(const struct in6_addr *addr, int type)
+static inline int ipv6_addr_label(const struct in6_addr *addr, int type,
+                                 int ifindex)
 {
  /*
   *    prefix (longest match)  label
@@ -910,7 +911,8 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev,
        struct inet6_ifaddr *ifa_result = NULL;
        int daddr_type = __ipv6_addr_type(daddr);
        int daddr_scope = __ipv6_addr_src_scope(daddr_type);
-       u32 daddr_label = ipv6_addr_label(daddr, daddr_type);
+       int daddr_ifindex = daddr_dev ? daddr_dev->ifindex : 0;
+       u32 daddr_label = ipv6_addr_label(daddr, daddr_type, daddr_ifindex);
        struct net_device *dev;
 
        memset(&hiscore, 0, sizeof(hiscore));
@@ -1084,12 +1086,14 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev,
                        /* Rule 6: Prefer matching label */
                        if (hiscore.rule < 6) {
                                if (ipv6_addr_label(&ifa_result->addr,
-                                                   hiscore.addr_type) == 
daddr_label)
+                                                   hiscore.addr_type,
+                                                   
ifa_result->idev->dev->ifindex) == daddr_label)
                                        hiscore.attrs |= IPV6_SADDR_SCORE_LABEL;
                                hiscore.rule++;
                        }
                        if (ipv6_addr_label(&ifa->addr,
-                                           score.addr_type) == daddr_label) {
+                                           score.addr_type,
+                                           ifa->idev->dev->ifindex) == 
daddr_label) {
                                score.attrs |= IPV6_SADDR_SCORE_LABEL;
                                if (!(hiscore.attrs & IPV6_SADDR_SCORE_LABEL)) {
                                        score.rule = 6;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to