diff options
author | Bruce M Simpson <bms@FreeBSD.org> | 2006-09-25 10:11:16 +0000 |
---|---|---|
committer | Bruce M Simpson <bms@FreeBSD.org> | 2006-09-25 10:11:16 +0000 |
commit | 07ea6709eac917d8ddfca2acef00c75b8d300d38 (patch) | |
tree | 32da2515bec6367ff396b9b72c433ec025da3189 /sys/netinet/in_var.h | |
parent | 4dc630cdd2f7a790604d2724ecb19c6aa95130a7 (diff) | |
download | src-07ea6709eac917d8ddfca2acef00c75b8d300d38.tar.gz src-07ea6709eac917d8ddfca2acef00c75b8d300d38.zip |
Account for output IP datagrams on the ifaddr where they originated from,
*not* the first ifaddr on the ifp. This is similar to what NetBSD does.
PR: kern/72936
Submitted by: alfred
Reviewed by: andre
Notes
Notes:
svn path=/head/; revision=162615
Diffstat (limited to 'sys/netinet/in_var.h')
-rw-r--r-- | sys/netinet/in_var.h | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h index 319b0dc5519b..9669a1b8993f 100644 --- a/sys/netinet/in_var.h +++ b/sys/netinet/in_var.h @@ -94,6 +94,19 @@ extern u_long in_ifaddrhmask; /* mask for hash table */ #define INADDR_HASH(x) \ (&in_ifaddrhashtbl[INADDR_HASHVAL(x) & in_ifaddrhmask]) +/* + * Macro for finding the internet address structure (in_ifaddr) corresponding + * corresponding to one of our IP addresses (in_addr). + */ +#define INADDR_TO_IFADDR(addr, ia) \ + /* struct in_addr addr; */ \ + /* struct in_ifaddr *ia; */ \ +do { \ +\ + LIST_FOREACH(ia, INADDR_HASH((addr).s_addr), ia_hash) \ + if (IA_SIN(ia)->sin_addr.s_addr == (addr).s_addr) \ + break; \ +} while (0) /* * Macro for finding the interface (ifnet structure) corresponding to one @@ -105,9 +118,7 @@ extern u_long in_ifaddrhmask; /* mask for hash table */ { \ struct in_ifaddr *ia; \ \ - LIST_FOREACH(ia, INADDR_HASH((addr).s_addr), ia_hash) \ - if (IA_SIN(ia)->sin_addr.s_addr == (addr).s_addr) \ - break; \ + INADDR_TO_IFADDR(addr, ia); \ (ifp) = (ia == NULL) ? NULL : ia->ia_ifp; \ } |