]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Bugfix in interpret
authorOndrej Zajicek <santiago@crfreenet.org>
Thu, 25 Dec 2008 16:49:57 +0000 (17:49 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Thu, 25 Dec 2008 16:49:57 +0000 (17:49 +0100)
Missing cases in filter code interpret leads to crash
when  bgp_next_hop attr was queried.

filter/filter.c

index 109c7de4e18d42b885dd09c7a6370cf3c1ed2e61..1bd9a090baee7430a31fabb85d76b4c92818e49b 100644 (file)
@@ -560,6 +560,15 @@ interpret(struct f_inst *what)
        res.type = T_INT;
        res.val.i = e->u.data;
        break;
+      case EAF_TYPE_IP_ADDRESS:
+       if (!e) {
+         res.type = T_VOID;
+         break;
+       }
+       res.type = T_IP;
+       struct adata * ad = e->u.ptr;
+       res.val.px.ip = * (ip_addr *) ad->data;
+       break;
       case EAF_TYPE_AS_PATH:
        if (!e) {
          res.type = T_VOID;
@@ -599,6 +608,14 @@ interpret(struct f_inst *what)
          runtime( "Setting int attribute to non-int value" );
        l->attrs[0].u.data = v1.val.i;
        break;
+      case EAF_TYPE_IP_ADDRESS:
+       if (v1.type != T_IP)
+         runtime( "Setting ip attribute to non-ip value" );
+       int len = sizeof(ip_addr);
+       struct adata *ad = lp_alloc(f_pool, sizeof(struct adata) + len);
+       ad->length = len;
+       (* (ip_addr *) ad->data) = v1.val.px.ip;
+       break;
       case EAF_TYPE_AS_PATH:
        if (v1.type != T_PATH)
          runtime( "Setting path attribute to non-path value" );