rtmsg
} rtmsg;
(void) memset(&rtmsg, 0, sizeof (rtmsg));
rtmsg.rm_mh.rtm_version = RTM_VERSION;
rtmsg.rm_mh.rtm_msglen = sizeof (rtmsg);
rtmsg.rm_mh.rtm_type = type;
rtmsg.rm_mh.rtm_pid = getpid();
rtmsg.rm_mh.rtm_flags = RTF_GATEWAY | RTF_STATIC | flags;
rtmsg.rm_mh.rtm_addrs = RTA_GATEWAY | RTA_DST | RTA_NETMASK | RTA_IFP;
rtmsg.rm_gw.sin_family = AF_INET;
rtmsg.rm_gw.sin_addr = *gateway_nbo;
rtmsg.rm_dst.sin_family = AF_INET;
rtmsg.rm_dst.sin_addr.s_addr = htonl(INADDR_ANY);
rtmsg.rm_mask.sin_family = AF_INET;
rtmsg.rm_mask.sin_addr.s_addr = htonl(0);
rtmsg.rm_ifp.sdl_family = AF_LINK;
rtmsg.rm_ifp.sdl_index = ifindex;
return (write(rtsock_fd, &rtmsg, sizeof (rtmsg)) == sizeof (rtmsg));
if ((ret = rtmsg(newrt)) == 0)
static int rtmsg(rtcmd_irep_t *rcip);
} rtmsg;
char *cp = rtmsg.space;
(void) memset(&rtmsg, 0, sizeof (rtmsg));
rtmsg.hdr.rtm_type = RTM_GET;
rtmsg.hdr.rtm_flags = RTF_UP | RTF_HOST;
rtmsg.hdr.rtm_version = RTM_VERSION;
rtmsg.hdr.rtm_seq = ++rts_seqno;
rtmsg.hdr.rtm_addrs = RTA_IFP | RTA_DST;
rtmsg.hdr.rtm_msglen = l = cp - (char *)&rtmsg;
if ((rlen = write(s, &rtmsg, l)) < 0) {
} else if (rlen < (int)rtmsg.hdr.rtm_msglen) {
l = read(s, &rtmsg, sizeof (rtmsg));
} while (l > 0 && (rtmsg.hdr.rtm_seq != rts_seqno ||
rtmsg.hdr.rtm_pid != pid));
if (rtmsg.hdr.rtm_version != RTM_VERSION) {
rtmsg.hdr.rtm_version);
if (rtmsg.hdr.rtm_msglen != (ushort_t)l) {
rtmsg.hdr.rtm_msglen, l);
if (rtmsg.hdr.rtm_errno != 0) {
errno = rtmsg.hdr.rtm_errno;
if ((rtmsg.hdr.rtm_addrs & RTA_IFP) == 0) {
cp = ((char *)(&rtmsg.hdr + 1));
if ((i & rtmsg.hdr.rtm_addrs) != 0)