case NFT_SET_ELEM_ATTR_FLAGS:
case NFT_SET_ELEM_ATTR_KEY: /* NFTA_SET_ELEM_KEY */
case NFT_SET_ELEM_ATTR_VERDICT: /* NFTA_SET_ELEM_DATA */
+ case NFT_SET_ELEM_ATTR_DATA: /* NFTA_SET_ELEM_DATA */
break;
default:
return;
s->data.chain = strdup(data);
break;
+ case NFT_SET_ELEM_ATTR_DATA: /* NFTA_SET_ELEM_DATA */
+ memcpy(s->data.val, data, data_len);
+ s->data.len = data_len;
+ break;
default:
return;
}
if (s->flags & (1 << NFT_SET_ELEM_ATTR_CHAIN))
return &s->data.chain;
break;
+ case NFT_SET_ELEM_ATTR_DATA: /* NFTA_SET_ELEM_DATA */
+ if (s->flags & (1 << NFT_SET_ELEM_ATTR_DATA)) {
+ *data_len = s->data.len;
+ return &s->data.val;
+ }
+ break;
default:
break;
}
mnl_attr_nest_end(nlh, nest1);
mnl_attr_nest_end(nlh, nest2);
}
+ if (e->flags & (1 << NFT_SET_ELEM_ATTR_DATA)) {
+ struct nlattr *nest1;
+
+ nest1 = mnl_attr_nest_start(nlh, NFTA_SET_ELEM_DATA);
+ mnl_attr_put(nlh, NFTA_DATA_VALUE, e->data.len, e->data.val);
+ mnl_attr_nest_end(nlh, nest1);
+ }
}
void nft_set_elems_nlmsg_build_payload(struct nlmsghdr *nlh, struct nft_set *s)
case DATA_CHAIN:
s->flags |= (1 << NFT_SET_ELEM_ATTR_CHAIN);
break;
+ case DATA_VALUE:
+ s->flags |= (1 << NFT_SET_ELEM_ATTR_DATA);
+ break;
}
}
if (ret < 0)