Commit bf825f81b454fae2ffe1b675f3a549656726440e
Committed by
David S. Miller
1 parent
7f6b9dbd5a
Exists in
master
and in
7 other branches
xfrm: introduce basic mark infrastructure
Add basic structuring and accessors for xfrm mark Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 2 changed files with 31 additions and 3 deletions Side-by-side Diff
include/linux/xfrm.h
... | ... | @@ -267,8 +267,8 @@ |
267 | 267 | XFRMA_ALG_COMP, /* struct xfrm_algo */ |
268 | 268 | XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */ |
269 | 269 | XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */ |
270 | - XFRMA_SA, | |
271 | - XFRMA_POLICY, | |
270 | + XFRMA_SA, /* struct xfrm_usersa_info */ | |
271 | + XFRMA_POLICY, /*struct xfrm_userpolicy_info */ | |
272 | 272 | XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */ |
273 | 273 | XFRMA_LTIME_VAL, |
274 | 274 | XFRMA_REPLAY_VAL, |
275 | 275 | |
276 | 276 | |
... | ... | @@ -276,15 +276,21 @@ |
276 | 276 | XFRMA_ETIMER_THRESH, |
277 | 277 | XFRMA_SRCADDR, /* xfrm_address_t */ |
278 | 278 | XFRMA_COADDR, /* xfrm_address_t */ |
279 | - XFRMA_LASTUSED, | |
279 | + XFRMA_LASTUSED, /* unsigned long */ | |
280 | 280 | XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */ |
281 | 281 | XFRMA_MIGRATE, |
282 | 282 | XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */ |
283 | 283 | XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ |
284 | 284 | XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */ |
285 | + XFRMA_MARK, /* struct xfrm_mark */ | |
285 | 286 | __XFRMA_MAX |
286 | 287 | |
287 | 288 | #define XFRMA_MAX (__XFRMA_MAX - 1) |
289 | +}; | |
290 | + | |
291 | +struct xfrm_mark { | |
292 | + __u32 v; /* value */ | |
293 | + __u32 m; /* mask */ | |
288 | 294 | }; |
289 | 295 | |
290 | 296 | enum xfrm_sadattr_type_t { |
include/net/xfrm.h
... | ... | @@ -140,6 +140,7 @@ |
140 | 140 | |
141 | 141 | struct xfrm_id id; |
142 | 142 | struct xfrm_selector sel; |
143 | + struct xfrm_mark mark; | |
143 | 144 | |
144 | 145 | u32 genid; |
145 | 146 | |
... | ... | @@ -481,6 +482,7 @@ |
481 | 482 | |
482 | 483 | u32 priority; |
483 | 484 | u32 index; |
485 | + struct xfrm_mark mark; | |
484 | 486 | struct xfrm_selector selector; |
485 | 487 | struct xfrm_lifetime_cfg lft; |
486 | 488 | struct xfrm_lifetime_cur curlft; |
... | ... | @@ -1569,6 +1571,26 @@ |
1569 | 1571 | return skb->sp->xvec[skb->sp->len - 1]; |
1570 | 1572 | } |
1571 | 1573 | #endif |
1574 | + | |
1575 | +static inline int xfrm_mark_get(struct nlattr **attrs, struct xfrm_mark *m) | |
1576 | +{ | |
1577 | + if (attrs[XFRMA_MARK]) | |
1578 | + memcpy(m, nla_data(attrs[XFRMA_MARK]), sizeof(m)); | |
1579 | + else | |
1580 | + m->v = m->m = 0; | |
1581 | + | |
1582 | + return m->v & m->m; | |
1583 | +} | |
1584 | + | |
1585 | +static inline int xfrm_mark_put(struct sk_buff *skb, struct xfrm_mark *m) | |
1586 | +{ | |
1587 | + if (m->m | m->v) | |
1588 | + NLA_PUT(skb, XFRMA_MARK, sizeof(struct xfrm_mark), m); | |
1589 | + return 0; | |
1590 | + | |
1591 | +nla_put_failure: | |
1592 | + return -1; | |
1593 | +} | |
1572 | 1594 | |
1573 | 1595 | #endif /* _NET_XFRM_H */ |