summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
Diffstat (limited to 'usr')
-rw-r--r--usr/src/uts/common/inet/ipf/fil.c2
-rw-r--r--usr/src/uts/common/inet/ipf/ip_fil_solaris.c19
2 files changed, 17 insertions, 4 deletions
diff --git a/usr/src/uts/common/inet/ipf/fil.c b/usr/src/uts/common/inet/ipf/fil.c
index e8732970f1..ec754c4031 100644
--- a/usr/src/uts/common/inet/ipf/fil.c
+++ b/usr/src/uts/common/inet/ipf/fil.c
@@ -3706,7 +3706,7 @@ ipf_stack_t *ifs;
ifp, fdp->fd_ifp, ifs);
if (action != IPFSYNC_RESYNC)
- return;
+ continue;
if (fr->fr_type == FR_T_IPF) {
if (fr->fr_satype != FRI_NORMAL &&
diff --git a/usr/src/uts/common/inet/ipf/ip_fil_solaris.c b/usr/src/uts/common/inet/ipf/ip_fil_solaris.c
index 2c4619543e..695a0e6df6 100644
--- a/usr/src/uts/common/inet/ipf/ip_fil_solaris.c
+++ b/usr/src/uts/common/inet/ipf/ip_fil_solaris.c
@@ -1943,7 +1943,8 @@ int ipf_nic_event_v4(hook_event_token_t event, hook_data_t info,
switch (hn->hne_event)
{
case NE_PLUMB :
- frsync(IPFSYNC_NEWIFP, 4, (void *)hn->hne_nic, hn->hne_data, ifs);
+ frsync(IPFSYNC_NEWIFP, 4, (void *)hn->hne_nic, hn->hne_data,
+ ifs);
fr_natifpsync(IPFSYNC_NEWIFP, (void *)hn->hne_nic,
hn->hne_data, ifs);
fr_statesync(IPFSYNC_NEWIFP, 4, (void *)hn->hne_nic,
@@ -1957,8 +1958,20 @@ int ipf_nic_event_v4(hook_event_token_t event, hook_data_t info,
break;
case NE_ADDRESS_CHANGE :
- sin = hn->hne_data;
- fr_nataddrsync((void *)hn->hne_nic, &sin->sin_addr, ifs);
+ /*
+ * We only respond to events for logical interface 0 because
+ * IPFilter only uses the first address given to a network
+ * interface. We check for hne_lif==1 because the netinfo
+ * code maps adds 1 to the lif number so that it can return
+ * 0 to indicate "no more lifs" when walking them.
+ */
+ if (hn->hne_lif == 1) {
+ frsync(IPFSYNC_RESYNC, 4, (void *)hn->hne_nic, NULL,
+ ifs);
+ sin = hn->hne_data;
+ fr_nataddrsync((void *)hn->hne_nic, &sin->sin_addr,
+ ifs);
+ }
break;
default :