diff options
author | 2013-10-12 11:55:45 +0000 | |
---|---|---|
committer | 2013-10-12 11:55:45 +0000 | |
commit | 42a457a06e3acbeb8f903c4ab798065ea5568acc (patch) | |
tree | c8e0dab30dac0975ad3a247dafc465aa33238e1d | |
parent | standalone hfsc implementation with new interface to the consumers, for (diff) | |
download | wireguard-openbsd-42a457a06e3acbeb8f903c4ab798065ea5568acc.tar.xz wireguard-openbsd-42a457a06e3acbeb8f903c4ab798065ea5568acc.zip |
give tagname2tag and its siblings an extra "create" parameter. if 1, it
behaves like before and creates the mapping if needed. if 0, lookup only.
looked over by many, ok phessler sthen
-rw-r--r-- | sys/net/if_bridge.c | 4 | ||||
-rw-r--r-- | sys/net/pf_ioctl.c | 19 | ||||
-rw-r--r-- | sys/net/pfkeyv2_convert.c | 4 | ||||
-rw-r--r-- | sys/net/pfvar.h | 4 |
4 files changed, 17 insertions, 14 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index 2aa4ce05341..9ea29ba1a3f 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_bridge.c,v 1.214 2013/08/21 13:53:48 mpi Exp $ */ +/* $OpenBSD: if_bridge.c,v 1.215 2013/10/12 11:55:45 henning Exp $ */ /* * Copyright (c) 1999, 2000 Jason L. Wright (jason@thought.net) @@ -2137,7 +2137,7 @@ bridge_addrule(struct bridge_iflist *bif, struct ifbrlreq *req, int out) n->brl_flags = req->ifbr_flags; #if NPF > 0 if (req->ifbr_tagname[0]) - n->brl_tag = pf_tagname2tag(req->ifbr_tagname); + n->brl_tag = pf_tagname2tag(req->ifbr_tagname, 1); else n->brl_tag = 0; #endif diff --git a/sys/net/pf_ioctl.c b/sys/net/pf_ioctl.c index e9abe694e62..e05d88e3bf3 100644 --- a/sys/net/pf_ioctl.c +++ b/sys/net/pf_ioctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pf_ioctl.c,v 1.259 2013/03/28 16:45:16 tedu Exp $ */ +/* $OpenBSD: pf_ioctl.c,v 1.260 2013/10/12 11:55:45 henning Exp $ */ /* * Copyright (c) 2001 Daniel Hartmeier @@ -143,7 +143,7 @@ TAILQ_HEAD(pf_tags, pf_tagname) pf_tags = TAILQ_HEAD_INITIALIZER(pf_tags), #if (PF_QNAME_SIZE != PF_TAG_NAME_SIZE) #error PF_QNAME_SIZE must be equal to PF_TAG_NAME_SIZE #endif -u_int16_t tagname2tag(struct pf_tags *, char *); +u_int16_t tagname2tag(struct pf_tags *, char *, int); void tag2tagname(struct pf_tags *, u_int16_t, char *); void tag_unref(struct pf_tags *, u_int16_t); int pf_rtlabel_add(struct pf_addr_wrap *); @@ -341,7 +341,7 @@ pf_purge_rule(struct pf_ruleset *ruleset, struct pf_rule *rule) } u_int16_t -tagname2tag(struct pf_tags *head, char *tagname) +tagname2tag(struct pf_tags *head, char *tagname, int create) { struct pf_tagname *tag, *p = NULL; u_int16_t new_tagid = 1; @@ -352,6 +352,9 @@ tagname2tag(struct pf_tags *head, char *tagname) return (tag->tag); } + if (!create) + return (0); + /* * to avoid fragmentation, we do a linear search from the beginning * and take the first free slot we find. if there is none or the list @@ -416,9 +419,9 @@ tag_unref(struct pf_tags *head, u_int16_t tag) } u_int16_t -pf_tagname2tag(char *tagname) +pf_tagname2tag(char *tagname, int create) { - return (tagname2tag(&pf_tags, tagname)); + return (tagname2tag(&pf_tags, tagname, create)); } void @@ -480,7 +483,7 @@ pf_rtlabel_copyout(struct pf_addr_wrap *a) u_int32_t pf_oqname2qid(char *qname) { - return ((u_int32_t)tagname2tag(&pf_oqids, qname)); + return ((u_int32_t)tagname2tag(&pf_oqids, qname, 1)); } void @@ -2588,10 +2591,10 @@ pf_rule_copyin(struct pf_rule *from, struct pf_rule *to, to->return_icmp6 = from->return_icmp6; to->max_mss = from->max_mss; if (to->tagname[0]) - if ((to->tag = pf_tagname2tag(to->tagname)) == 0) + if ((to->tag = pf_tagname2tag(to->tagname, 1)) == 0) return (EBUSY); if (to->match_tagname[0]) - if ((to->match_tag = pf_tagname2tag(to->match_tagname)) == 0) + if ((to->match_tag = pf_tagname2tag(to->match_tagname, 1)) == 0) return (EBUSY); to->scrub_flags = from->scrub_flags; to->uid = from->uid; diff --git a/sys/net/pfkeyv2_convert.c b/sys/net/pfkeyv2_convert.c index 056e4c741ad..3ba2f29177d 100644 --- a/sys/net/pfkeyv2_convert.c +++ b/sys/net/pfkeyv2_convert.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pfkeyv2_convert.c,v 1.40 2013/06/05 02:03:15 reyk Exp $ */ +/* $OpenBSD: pfkeyv2_convert.c,v 1.41 2013/10/12 11:55:46 henning Exp $ */ /* * The author of this code is Angelos D. Keromytis (angelos@keromytis.org) * @@ -994,7 +994,7 @@ import_tag(struct tdb *tdb, struct sadb_x_tag *stag) if (stag) { s = (char *)(stag + 1); - tdb->tdb_tag = pf_tagname2tag(s); + tdb->tdb_tag = pf_tagname2tag(s, 1); } } diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h index dcf2f1706a2..7490421bd9c 100644 --- a/sys/net/pfvar.h +++ b/sys/net/pfvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pfvar.h,v 1.389 2013/07/23 22:47:10 bluhm Exp $ */ +/* $OpenBSD: pfvar.h,v 1.390 2013/10/12 11:55:46 henning Exp $ */ /* * Copyright (c) 2001 Daniel Hartmeier @@ -1912,7 +1912,7 @@ int pfi_clear_flags(const char *, int); void pfi_xcommit(void); int pf_match_tag(struct mbuf *, struct pf_rule *, int *); -u_int16_t pf_tagname2tag(char *); +u_int16_t pf_tagname2tag(char *, int); void pf_tag2tagname(u_int16_t, char *); void pf_tag_ref(u_int16_t); void pf_tag_unref(u_int16_t); |