Remove half way implemented address and default route proposals.
This never worked out and is getting in the way of DNS proposals which
are coming next.
No (intended) functional change.

The diff is mostly mechanical, pull 3 types out of the imsg_type enum
and churn until it compiles again.
I'm going to put this in soon but testing would still be appreciated.

diff --git Makefile Makefile
index 989f432c621..5172c51b1ba 100644
--- Makefile
+++ Makefile
@@ -7,8 +7,6 @@ MAN=    slaacd.8
 
 #DEBUG=        -g -DDEBUG=3 -O0
 
-CFLAGS+= -DSKIP_PROPOSAL
-
 CFLAGS+= -Wall -I${.CURDIR}
 CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
 CFLAGS+= -Wmissing-declarations
diff --git engine.c engine.c
index 6a4762ecd65..59bc003edc8 100644
--- engine.c
+++ engine.c
@@ -104,7 +104,6 @@ const char* if_state_name[] = {
 
 enum proposal_state {
        PROPOSAL_NOT_CONFIGURED,
-       PROPOSAL_SENT,
        PROPOSAL_CONFIGURED,
        PROPOSAL_NEARLY_EXPIRED,
        PROPOSAL_WITHDRAWN,
@@ -114,7 +113,6 @@ enum proposal_state {
 
 const char* proposal_state_name[] = {
        "NOT_CONFIGURED",
-       "SENT",
        "CONFIGURED",
        "NEARLY_EXPIRED",
        "WITHDRAWN",
@@ -260,7 +258,6 @@ void                         free_dfr_proposal(struct 
dfr_proposal *);
 void                    withdraw_dfr(struct dfr_proposal *);
 char                   *parse_dnssl(char *, int);
 void                    update_iface_ra(struct slaacd_iface *, struct radv *);
-void                    send_proposal(struct imsg_proposal *);
 void                    start_probe(struct slaacd_iface *);
 void                    address_proposal_timeout(int, short, void *);
 void                    dfr_proposal_timeout(int, short, void *);
@@ -399,7 +396,6 @@ engine_dispatch_frontend(int fd, short event, void *bula)
        struct imsg                      imsg;
        struct slaacd_iface             *iface;
        struct imsg_ra                   ra;
-       struct imsg_proposal_ack         proposal_ack;
        struct address_proposal         *addr_proposal = NULL;
        struct dfr_proposal             *dfr_proposal = NULL;
        struct imsg_del_addr             del_addr;
@@ -481,43 +477,6 @@ engine_dispatch_frontend(int fd, short event, void *bula)
                                    IMSG_CTL_SEND_SOLICITATION, imsg.hdr.pid,
                                    &iface->if_index, sizeof(iface->if_index));
                        break;
-               case IMSG_PROPOSAL_ACK:
-                       if (IMSG_DATA_SIZE(imsg) != sizeof(proposal_ack))
-                               fatalx("%s: IMSG_PROPOSAL_ACK wrong length: "
-                                   "%lu", __func__, IMSG_DATA_SIZE(imsg));
-                       memcpy(&proposal_ack, imsg.data, sizeof(proposal_ack));
-                       log_debug("%s: IMSG_PROPOSAL_ACK: %lld - %d", __func__,
-                           proposal_ack.id, proposal_ack.pid);
-                       if (proposal_ack.pid != getpid()) {
-                               log_debug("IMSG_PROPOSAL_ACK: wrong pid, "
-                                   "ignoring");
-                               break;
-                       }
-
-                       iface = get_slaacd_iface_by_id(proposal_ack.if_index);
-                       if (iface == NULL) {
-                               log_debug("IMSG_PROPOSAL_ACK: unknown interface"
-                                   ", ignoring");
-                               break;
-                       }
-
-                       addr_proposal = find_address_proposal_by_id(iface,
-                           proposal_ack.id);
-                       if (addr_proposal == NULL) {
-                               dfr_proposal = find_dfr_proposal_by_id(iface,
-                                   proposal_ack.id);
-                               if (dfr_proposal == NULL) {
-                                       log_debug("IMSG_PROPOSAL_ACK: cannot "
-                                           "find proposal, ignoring");
-                                       break;
-                               }
-                       }
-                       if (addr_proposal != NULL)
-                               configure_address(addr_proposal);
-                       else if (dfr_proposal != NULL)
-                               configure_dfr(dfr_proposal);
-
-                       break;
                case IMSG_DEL_ADDRESS:
                        if (IMSG_DATA_SIZE(imsg) != sizeof(del_addr))
                                fatalx("%s: IMSG_DEL_ADDRESS wrong length: %lu",
@@ -1982,11 +1941,8 @@ gen_address_proposal(struct slaacd_iface *iface, struct 
radv *ra, struct
 
        gen_addr(iface, prefix, addr_proposal, privacy);
 
-       tv.tv_sec = 0;
-       tv.tv_usec = 0;
-       evtimer_add(&addr_proposal->timer, &tv);
-
        LIST_INSERT_HEAD(&iface->addr_proposals, addr_proposal, entries);
+       configure_address(addr_proposal);
 
        hbuf = sin6_to_str(&addr_proposal->addr);
        log_debug("%s: iface %d: %s: %lld s", __func__,
@@ -2047,11 +2003,8 @@ gen_dfr_proposal(struct slaacd_iface *iface, struct radv 
*ra)
        dfr_proposal->router_lifetime = ra->router_lifetime;
        dfr_proposal->rpref = ra->rpref;
 
-       tv.tv_sec = 0;
-       tv.tv_usec = 0;
-       evtimer_add(&dfr_proposal->timer, &tv);
-
        LIST_INSERT_HEAD(&iface->dfr_proposals, dfr_proposal, entries);
+       configure_dfr(dfr_proposal);
 
        hbuf = sin6_to_str(&dfr_proposal->addr);
        log_debug("%s: iface %d: %s: %lld s", __func__,
@@ -2130,20 +2083,6 @@ free_dfr_proposal(struct dfr_proposal *dfr_proposal)
        free(dfr_proposal);
 }
 
-void
-send_proposal(struct imsg_proposal *proposal)
-{
-#ifndef SKIP_PROPOSAL
-       engine_imsg_compose_main(IMSG_PROPOSAL, 0, proposal, sizeof(*proposal));
-#else
-       struct imsg_proposal_ack        ack;
-       ack.id = proposal->id;
-       ack.pid = proposal->pid;
-       ack.if_index = proposal->if_index;
-       engine_imsg_compose_frontend(IMSG_FAKE_ACK, 0, &ack, sizeof(ack));
-#endif
-}
-
 void
 start_probe(struct slaacd_iface *iface)
 {
@@ -2165,7 +2104,6 @@ void
 address_proposal_timeout(int fd, short events, void *arg)
 {
        struct address_proposal *addr_proposal;
-       struct imsg_proposal     proposal;
        struct timeval           tv;
        const char              *hbuf;
 
@@ -2178,38 +2116,6 @@ address_proposal_timeout(int fd, short events, void *arg)
            addr_proposal->privacy ? "y" : "n");
 
        switch (addr_proposal->state) {
-       case PROPOSAL_NOT_CONFIGURED:
-       case PROPOSAL_SENT:
-               if (addr_proposal->timeout_count++ < 6) {
-                       addr_proposal->id = ++proposal_id;
-
-                       memset(&proposal, 0, sizeof(proposal));
-                       proposal.if_index = addr_proposal->if_index;
-                       proposal.pid = getpid();
-                       proposal.id = addr_proposal->id;
-                       memcpy(&proposal.addr, &addr_proposal->addr,
-                           sizeof(proposal.addr));
-                       memcpy(&proposal.mask, &addr_proposal->mask,
-                           sizeof(proposal.mask));
-
-                       proposal.rtm_addrs = RTA_NETMASK | RTA_IFA;
-
-                       addr_proposal->state = PROPOSAL_SENT;
-
-                       send_proposal(&proposal);
-
-                       tv.tv_sec = addr_proposal->next_timeout;
-                       tv.tv_usec = arc4random_uniform(1000000);
-                       addr_proposal->next_timeout *= 2;
-                       evtimer_add(&addr_proposal->timer, &tv);
-                       log_debug("%s: scheduling new timeout in %llds.%06ld",
-                           __func__, tv.tv_sec, tv.tv_usec);
-               } else {
-                       log_debug("%s: giving up, no response to proposal",
-                           __func__);
-                       free_address_proposal(addr_proposal);
-               }
-               break;
        case PROPOSAL_CONFIGURED:
                log_debug("PROPOSAL_CONFIGURED timeout: id: %lld, privacy: %s",
                    addr_proposal->id, addr_proposal->privacy ? "y" : "n");
@@ -2274,7 +2180,6 @@ void
 dfr_proposal_timeout(int fd, short events, void *arg)
 {
        struct dfr_proposal     *dfr_proposal;
-       struct imsg_proposal     proposal;
        struct timeval           tv;
        const char              *hbuf;
 
@@ -2285,36 +2190,6 @@ dfr_proposal_timeout(int fd, short events, void *arg)
            hbuf, proposal_state_name[dfr_proposal->state]);
 
        switch (dfr_proposal->state) {
-       case PROPOSAL_NOT_CONFIGURED:
-       case PROPOSAL_SENT:
-               if (dfr_proposal->timeout_count++ < 6) {
-                       dfr_proposal->id = ++proposal_id;
-
-                       memset(&proposal, 0, sizeof(proposal));
-                       proposal.if_index = dfr_proposal->if_index;
-                       proposal.pid = getpid();
-                       proposal.id = dfr_proposal->id;
-                       memcpy(&proposal.addr, &dfr_proposal->addr,
-                           sizeof(proposal.addr));
-
-                       proposal.rtm_addrs = RTA_GATEWAY;
-
-                       dfr_proposal->state = PROPOSAL_SENT;
-
-                       send_proposal(&proposal);
-
-                       tv.tv_sec = dfr_proposal->next_timeout;
-                       tv.tv_usec = arc4random_uniform(1000000);
-                       dfr_proposal->next_timeout *= 2;
-                       evtimer_add(&dfr_proposal->timer, &tv);
-                       log_debug("%s: scheduling new timeout in %llds.%06ld",
-                           __func__, tv.tv_sec, tv.tv_usec);
-               } else {
-                       log_debug("%s: giving up, no response to proposal",
-                           __func__);
-                       free_dfr_proposal(dfr_proposal);
-               }
-               break;
        case PROPOSAL_CONFIGURED:
                log_debug("PROPOSAL_CONFIGURED timeout: id: %lld",
                    dfr_proposal->id);
diff --git engine.h engine.h
index dfb2c97f8c2..3d65f87d5df 100644
--- engine.h
+++ engine.h
@@ -16,16 +16,6 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-struct imsg_proposal {
-       uint32_t                        if_index;
-       pid_t                           pid;
-       int64_t                         id;
-       struct sockaddr_in6             addr;
-       struct in6_addr                 mask;
-       struct sockaddr_in6             gateway;
-       int                             rtm_addrs;
-};
-
 struct imsg_configure_address {
        uint32_t                 if_index;
        struct sockaddr_in6      addr;
diff --git frontend.c frontend.c
index fb38815a97b..79022cfc79f 100644
--- frontend.c
+++ frontend.c
@@ -436,14 +436,6 @@ frontend_dispatch_engine(int fd, short event, void *bula)
                        if_index = *((uint32_t *)imsg.data);
                        send_solicitation(if_index);
                        break;
-               case IMSG_FAKE_ACK:
-                       if (IMSG_DATA_SIZE(imsg) != sizeof(struct
-                           imsg_proposal_ack))
-                               fatalx("%s: IMSG_FAKE_ACK wrong length: %lu",
-                                   __func__, IMSG_DATA_SIZE(imsg));
-                       frontend_imsg_compose_engine(IMSG_PROPOSAL_ACK,
-                          0, 0, imsg.data, sizeof(struct imsg_proposal_ack));
-                       break;
                default:
                        log_debug("%s: error handling imsg %d", __func__,
                            imsg.hdr.type);
@@ -727,7 +719,6 @@ void
 handle_route_message(struct rt_msghdr *rtm, struct sockaddr **rti_info)
 {
        struct if_msghdr                *ifm;
-       struct imsg_proposal_ack         proposal_ack;
        struct imsg_del_addr             del_addr;
        struct imsg_del_route            del_route;
        struct imsg_dup_addr             dup_addr;
@@ -735,12 +726,9 @@ handle_route_message(struct rt_msghdr *rtm, struct 
sockaddr **rti_info)
        struct sockaddr_in6             *sin6;
        struct in6_ifreq                 ifr6;
        struct in6_addr                 *in6;
-       int64_t                          id, pid;
        int                              xflags, if_index;
        char                             ifnamebuf[IFNAMSIZ];
        char                            *if_name;
-       char                            **ap, *argv[4], *p;
-       const char                      *errstr;
 
        switch (rtm->rtm_type) {
        case RTM_IFINFO:
@@ -863,57 +851,6 @@ handle_route_message(struct rt_msghdr *rtm, struct 
sockaddr **rti_info)
                log_debug("RTM_DELETE: %s[%u]", if_name,
                    ifm->ifm_index);
 
-               break;
-       case RTM_PROPOSAL:
-               ifm = (struct if_msghdr *)rtm;
-               if_name = if_indextoname(ifm->ifm_index, ifnamebuf);
-
-               if ((rtm->rtm_flags & (RTF_DONE | RTF_PROTO1)) ==
-                   (RTF_DONE | RTF_PROTO1) && rtm->rtm_addrs == RTA_LABEL) {
-                       rl = (struct sockaddr_rtlabel *)rti_info[RTAX_LABEL];
-                       /* XXX validate rl */
-
-                       p = rl->sr_label;
-
-                       for (ap = argv; ap < &argv[3] && (*ap =
-                           strsep(&p, " ")) != NULL;) {
-                               if (**ap != '\0')
-                                       ap++;
-                       }
-                       *ap = NULL;
-
-                       if (argv[0] != NULL && strncmp(argv[0],
-                           SLAACD_RTA_LABEL":", strlen(SLAACD_RTA_LABEL":"))
-                           == 0 && argv[1] != NULL && argv[2] != NULL &&
-                           argv[3] == NULL) {
-                               id = strtonum(argv[1], 0, INT64_MAX, &errstr);
-                               if (errstr != NULL) {
-                                       log_warnx("%s: proposal seq is %s: %s",
-                                           __func__, errstr, argv[1]);
-                                       break;
-                               }
-                               pid = strtonum(argv[2], 0, INT32_MAX, &errstr);
-                               if (errstr != NULL) {
-                                       log_warnx("%s: pid is %s: %s",
-                                           __func__, errstr, argv[2]);
-                                       break;
-                               }
-                               proposal_ack.id = id;
-                               proposal_ack.pid = pid;
-                               proposal_ack.if_index = ifm->ifm_index;
-
-                               frontend_imsg_compose_engine(IMSG_PROPOSAL_ACK,
-                                   0, 0, &proposal_ack, sizeof(proposal_ack));
-                       } else {
-                               log_debug("cannot parse: %s", rl->sr_label);
-                       }
-               } else {
-#if 0
-                       log_debug("%s: got flags %x, expcted %x", __func__,
-                           rtm->rtm_flags, (RTF_DONE | RTF_PROTO1));
-#endif
-               }
-
                break;
        default:
                log_debug("unexpected RTM: %d", rtm->rtm_type);
diff --git slaacd.c slaacd.c
index a2b0adb6dd2..8976e30f0a6 100644
--- slaacd.c
+++ slaacd.c
@@ -63,7 +63,6 @@ static pid_t  start_child(int, char *, int, int, int);
 
 void   main_dispatch_frontend(int, short, void *);
 void   main_dispatch_engine(int, short, void *);
-void   handle_proposal(struct imsg_proposal *);
 void   configure_interface(struct imsg_configure_address *);
 void   delete_address(struct imsg_configure_address *);
 void   configure_gateway(struct imsg_configure_dfr *, uint8_t);
@@ -267,8 +266,8 @@ main(int argc, char *argv[])
                fatal("route socket");
 
        rtfilter = ROUTE_FILTER(RTM_IFINFO) | ROUTE_FILTER(RTM_NEWADDR) |
-           ROUTE_FILTER(RTM_DELADDR) | ROUTE_FILTER(RTM_PROPOSAL) |
-           ROUTE_FILTER(RTM_DELETE) | ROUTE_FILTER(RTM_CHGADDRATTR);
+           ROUTE_FILTER(RTM_DELADDR) | ROUTE_FILTER(RTM_DELETE) |
+           ROUTE_FILTER(RTM_CHGADDRATTR);
        if (setsockopt(frontend_routesock, AF_ROUTE, ROUTE_MSGFILTER,
            &rtfilter, sizeof(rtfilter)) == -1)
                fatal("setsockopt(ROUTE_MSGFILTER)");
@@ -476,7 +475,6 @@ main_dispatch_engine(int fd, short event, void *bula)
        struct imsgev                   *iev = bula;
        struct imsgbuf                  *ibuf;
        struct imsg                      imsg;
-       struct imsg_proposal             proposal;
        struct imsg_configure_address    address;
        struct imsg_configure_dfr        dfr;
        ssize_t                          n;
@@ -504,14 +502,6 @@ main_dispatch_engine(int fd, short event, void *bula)
                        break;
 
                switch (imsg.hdr.type) {
-               case IMSG_PROPOSAL:
-                       if (IMSG_DATA_SIZE(imsg) != sizeof(proposal))
-                               fatalx("%s: IMSG_PROPOSAL wrong "
-                                   "length: %lu", __func__,
-                                   IMSG_DATA_SIZE(imsg));
-                       memcpy(&proposal, imsg.data, sizeof(proposal));
-                       handle_proposal(&proposal);
-                       break;
                case IMSG_CONFIGURE_ADDRESS:
                        if (IMSG_DATA_SIZE(imsg) != sizeof(address))
                                fatalx("%s: IMSG_CONFIGURE_ADDRESS wrong "
@@ -636,93 +626,6 @@ main_imsg_send_ipc_sockets(struct imsgbuf *frontend_buf,
        return (0);
 }
 
-#define        ROUNDUP(a)      \
-    (((a) & (sizeof(long) - 1)) ? (1 + ((a) | (sizeof(long) - 1))) : (a))
-
-void
-handle_proposal(struct imsg_proposal *proposal)
-{
-       struct rt_msghdr                 rtm;
-       struct sockaddr_in6              ifa, mask;
-       struct sockaddr_rtlabel          rl;
-       struct iovec                     iov[13];
-       long                             pad = 0;
-       int                              iovcnt = 0, padlen;
-
-       memset(&rtm, 0, sizeof(rtm));
-
-       rtm.rtm_version = RTM_VERSION;
-       rtm.rtm_type = RTM_PROPOSAL;
-       rtm.rtm_msglen = sizeof(rtm);
-       rtm.rtm_tableid = 0; /* XXX imsg->rdomain; */
-       rtm.rtm_index = proposal->if_index;
-       rtm.rtm_seq = ++rtm_seq;
-       rtm.rtm_priority = RTP_PROPOSAL_SLAAC;
-       rtm.rtm_addrs = (proposal->rtm_addrs & (RTA_NETMASK | RTA_IFA)) |
-           RTA_LABEL;
-       rtm.rtm_flags = RTF_UP;
-
-       iov[iovcnt].iov_base = &rtm;
-       iov[iovcnt++].iov_len = sizeof(rtm);
-
-       if (rtm.rtm_addrs & RTA_NETMASK) {
-               memset(&mask, 0, sizeof(mask));
-               mask.sin6_family = AF_INET6;
-               mask.sin6_len = sizeof(struct sockaddr_in6);
-               mask.sin6_addr = proposal->mask;
-
-               iov[iovcnt].iov_base = &mask;
-               iov[iovcnt++].iov_len = sizeof(mask);
-               rtm.rtm_msglen += sizeof(mask);
-               padlen = ROUNDUP(sizeof(mask)) - sizeof(mask);
-               if (padlen > 0) {
-                       iov[iovcnt].iov_base = &pad;
-                       iov[iovcnt++].iov_len = padlen;
-                       rtm.rtm_msglen += padlen;
-               }
-       }
-
-       if (rtm.rtm_addrs & RTA_IFA) {
-               memcpy(&ifa, &proposal->addr, sizeof(ifa));
-
-               if (ifa.sin6_family != AF_INET6 || ifa.sin6_len !=
-                   sizeof(struct sockaddr_in6)) {
-                       log_warnx("%s: invalid address", __func__);
-                       return;
-               }
-
-               iov[iovcnt].iov_base = &ifa;
-               iov[iovcnt++].iov_len = sizeof(ifa);
-               rtm.rtm_msglen += sizeof(ifa);
-               padlen = ROUNDUP(sizeof(ifa)) - sizeof(ifa);
-               if (padlen > 0) {
-                       iov[iovcnt].iov_base = &pad;
-                       iov[iovcnt++].iov_len = padlen;
-                       rtm.rtm_msglen += padlen;
-               }
-       }
-
-       rl.sr_len = sizeof(rl);
-       rl.sr_family = AF_UNSPEC;
-       if (snprintf(rl.sr_label, sizeof(rl.sr_label), "%s: %lld %d",
-           SLAACD_RTA_LABEL, proposal->id, (int32_t)proposal->pid) >=
-           (ssize_t)sizeof(rl.sr_label))
-               log_warnx("route label truncated");
-
-       iov[iovcnt].iov_base = &rl;
-       iov[iovcnt++].iov_len = sizeof(rl);
-       rtm.rtm_msglen += sizeof(rl);
-       padlen = ROUNDUP(sizeof(rl)) - sizeof(rl);
-       if (padlen > 0) {
-               iov[iovcnt].iov_base = &pad;
-               iov[iovcnt++].iov_len = padlen;
-               rtm.rtm_msglen += padlen;
-       }
-
-       if (writev(routesock, iov, iovcnt) == -1)
-               log_warn("failed to send proposal");
-}
-
 void
 configure_interface(struct imsg_configure_address *address)
 {
@@ -805,6 +708,9 @@ delete_address(struct imsg_configure_address *address)
 
 }
 
+#define        ROUNDUP(a)                                                      
\
+    (((a) & (sizeof(long) - 1)) ? (1 + ((a) | (sizeof(long) - 1))) : (a))
+
 void
 configure_gateway(struct imsg_configure_dfr *dfr, uint8_t rtm_type)
 {
diff --git slaacd.h slaacd.h
index c82b35d92e8..07c3efc1404 100644
--- slaacd.h
+++ slaacd.h
@@ -69,13 +69,10 @@ enum imsg_type {
        IMSG_UPDATE_IF,
        IMSG_REMOVE_IF,
        IMSG_RA,
-       IMSG_PROPOSAL,
-       IMSG_PROPOSAL_ACK,
        IMSG_CONFIGURE_ADDRESS,
        IMSG_WITHDRAW_ADDRESS,
        IMSG_DEL_ADDRESS,
        IMSG_DEL_ROUTE,
-       IMSG_FAKE_ACK,
        IMSG_CONFIGURE_DFR,
        IMSG_WITHDRAW_DFR,
        IMSG_DUP_ADDRESS,
@@ -200,12 +197,6 @@ struct imsg_del_route {
        struct sockaddr_in6     gw;
 };
 
-struct imsg_proposal_ack {
-       int64_t          id;
-       pid_t            pid;
-       uint32_t         if_index;
-};
-
 struct imsg_ra {
        uint32_t                if_index;
        struct sockaddr_in6     from;

-- 
I'm not entirely sure you are real.

Reply via email to