any ideas?

Anurag Maskey wrote:
>
> In 
> usr/src/cmd/cmd-inet/lib/nwamd/routing_events.c:routing_events_v4(), 
> no IF_STATE events are generated for any routing socket messages if 
> the address is 0.0.0.0.
>
> However, in ncu_ip.c:nwamd_ncu_handle_if_state_event(), there is code 
> for a bug workaround that checks the address on the interface if the 
> routing socket message was a DELADDR/FREEADDR for 0.0.0.0.  More 
> specifically, the following code:
>
>    1092         if (family == AF_INET && !if_state->nwe_addr_added) {
>    1093             /*
>    1094              * Check for failure due to CR 6745448: if we get a
>    1095              * report that an address has been deleted, then 
> check
>    1096              * for interface up, datalink down, and actual 
> address
>    1097              * non-zero.  If that combination is seen, then 
> this is
>    1098              * a DHCP cached lease, and we need to remove it from
>    1099              * the system, or it'll louse up the kernel routes
>    1100              * (which aren't smart enough to avoid dead
>    1101              * interfaces).
>    1102              */
>    1103             /*LINTED*/
>    1104             if (((struct sockaddr_in *)addr)->sin_addr.s_addr
>    1105                 == INADDR_ANY) {
>    1106                 socklen_t slen;
>    1107                 struct sockaddr_in s;
>    1108                 int pfxlen;
>    1109
>    1110                 if ((flags & IFF_UP) &&
>    1111                     !(flags & IFF_RUNNING) &&
>    1112                     icfg_get_addr(ifh, (struct sockaddr *)&s,
>    1113 &slen, &pfxlen, B_FALSE) == ICFG_SUCCESS &&
>    1114                     s.sin_addr.s_addr != INADDR_ANY) {
>    1115                     nlog(LOG_DEBUG, "bug workaround: "
>    1116                         "clear out addr %s on %s",
>    1117                         inet_ntoa(s.sin_addr), ifname);
>    1118                     s.sin_addr.s_addr = INADDR_ANY;
>    1119                     (void) icfg_set_addr(ifh,
>    1120                         (const struct sockaddr *)&s, slen);
>    1121                 }
>    1122                 icfg_close(ifh);
>    1123                 goto exit;
>    1124             }
>    1125         }
>
> This code is never executed in nwamd_ncu_handle_if_state_event().  Is 
> this code necessary?  If so, it should be moved to routing_events_v4().
>
> Another reason I ask this question is that libipadm does not allow the 
> setting of 0.0.0.0 address.  The only this that can be done here 
> (after consulting with libipadm expert Girish) is ipadm_delete_addr() 
> followed by ipadm_create_addr() with a DHCP address.  If the DHCP 
> server is not available (which appears to be the case here since the 
> comments suggest that the datalink is down), then the 0.0.0.0 address 
> will be set on the interface while trying to get the DHCP address and 
> lease.  Is this the intended behavior for such a scenario?
>
> Thanks,
> Anurag
>
> _______________________________________________
> nwam-dev mailing list
> nwam-dev at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/nwam-dev

Reply via email to