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