summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--filter/filter.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/filter/filter.c b/filter/filter.c
index 109c7de4..1bd9a090 100644
--- a/filter/filter.c
+++ b/filter/filter.c
@@ -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" );