chiark / gitweb /
Build system: Fix check for <linux/if_tun.h> and remove our copy
[secnet.git] / polypath.c
index af52473a8b840bc1939d3b8e1aaa87c2f97b7716..45e875aef968042bd66955bf4efe6603e55c8fe5 100644 (file)
@@ -127,10 +127,10 @@ static inline bool_t matches32(uint32_t word, uint32_t prefix, int prefixlen)
  * and
  *   out:
  */
-#define BAD(m)     do{ bad(st,badctx,m,0);  goto out; }while(0)
-#define BADE(m,ev) do{ bad(st,badctx,m,ev); goto out; }while(0)
+#define BAD(m)     do{ bad(st,badctx,M_WARNING,m,0);  goto out; }while(0)
+#define BADE(m,ev) do{ bad(st,badctx,M_WARNING,m,ev); goto out; }while(0)
 typedef void bad_fn_type(struct polypath *st, void *badctx,
-                        const char* m, int ev);
+                        int mclass, const char* m, int ev);
 
 typedef void polypath_ppml_callback_type(struct polypath *st,
           bad_fn_type *bad, void *badctx,
@@ -142,12 +142,13 @@ struct ppml_bad_ctx {
     char *undospace;
 };
 
-static void ppml_bad(struct polypath *st, void *badctx, const char *m, int ev)
+static void ppml_bad(struct polypath *st, void *badctx,
+                    int mclass, const char *m, int ev)
 {
     struct ppml_bad_ctx *bc=badctx;
     if (bc->undospace)
        *(bc->undospace)=' ';
-    lg_perror(LG,M_WARNING,ev,
+    lg_perror(LG,mclass,ev,
              "error processing polypath state change: %s"
              " (while processing `%s')",
              m,bc->orgl);
@@ -225,6 +226,7 @@ static void polypath_process_monitor_line(struct polypath *st, char *orgl,
            DONT("IPv6 address is " m)
         DONTMASK( 100,   0,  8, "Discard-Only (RFC6666)");
        DONTMASK(2001,   0, 23, "in IETF protocol block (RFC2928)");
+       DONTMASK(fc00,   0,  7, "Uniqe Local unicast (RFC4193)");
 #undef DONTMASK
        break;
     }
@@ -349,7 +351,8 @@ static void polypath_record_ifaddr(struct polypath *st,
        for (i=0; i<interf->socks.n_socks; i++)
            if (iaddr_equal(&interf->socks.socks[i].addr,ia,True))
                goto address_remove_found;
-       BAD("address to remove not found");
+       bad(st,badctx,M_DEBUG,"address to remove not found",0);
+       goto out;
     address_remove_found:
        lg_perror(LG,M_INFO,0,"removed %s %s",ifname,
                  iaddr_to_string(&interf->socks.socks[i].addr));
@@ -440,7 +443,7 @@ static bool_t polypath_sendmsg(void *commst, struct buffer_if *buf,
            int r=sendto(us->fd,buf->start,buf->size,
                         0,&dest->ia.sa,iaddr_socklen(&dest->ia));
            udp_sock_experienced(0,&st->uc,&interf->socks,us,
-                                1,af, r,errno);
+                                &dest->ia,af, r,errno);
            if (r>=0) {
                reasonable=True;
                break;
@@ -545,12 +548,13 @@ struct privsep_mdata {
     union iaddr ia;
 };
 
-static void papp_bad(struct polypath *st, void *badctx, const char *m, int ev)
+static void papp_bad(struct polypath *st, void *badctx,
+                    int mclass, const char *m, int ev)
 {
     const struct privsep_mdata *mdata=(const void*)st->lbuf.start;
     const char *addr_str=badctx;
 
-    lg_perror(LG,M_WARNING,ev,
+    lg_perror(LG,mclass,ev,
              "error processing polypath address change %s %s [%s]: %s",
              mdata->add ? "+" : "-",
              mdata->ifname, addr_str, m);