diff options
author | Henning Brauer <henning@cvs.openbsd.org> | 2005-10-17 08:43:36 +0000 |
---|---|---|
committer | Henning Brauer <henning@cvs.openbsd.org> | 2005-10-17 08:43:36 +0000 |
commit | 39fabf35216b41e26fde1267b94c91b0684dcba2 (patch) | |
tree | 4f38d7d737c137e9efdcf90a5f79c72f0a1a1ff4 /sys/netinet/ip_icmp.c | |
parent | 232a2a344188b9fbf9d6c7825619aa59ddafa7e5 (diff) |
make pf use one mbuf tag instead of 6 distinct ones. use a little struct
in the data part for the data from the previously distinct tags.
look up the tag early and carry a pointer to it around.
makes the code easier and saves some tag lookups and thus helps performance,
as proven by tests run by Schberle Dniel <Schoeberle.Daniel@aamtech.hu>
Initially hacked up somewhere over the atlantic ocean in an A330
early testing reyk and moritz, "put it in" theo
Diffstat (limited to 'sys/netinet/ip_icmp.c')
-rw-r--r-- | sys/netinet/ip_icmp.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c index f82e5ab5fe7..69ffef86641 100644 --- a/sys/netinet/ip_icmp.c +++ b/sys/netinet/ip_icmp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip_icmp.c,v 1.68 2005/07/31 03:30:55 pascoe Exp $ */ +/* $OpenBSD: ip_icmp.c,v 1.69 2005/10/17 08:43:34 henning Exp $ */ /* $NetBSD: ip_icmp.c,v 1.19 1996/02/13 23:42:22 christos Exp $ */ /* @@ -134,8 +134,10 @@ icmp_do_error(struct mbuf *n, int type, int code, n_long dest, int destmtu) unsigned oiplen = oip->ip_hl << 2; struct icmp *icp; struct mbuf *m; - struct m_tag *mtag; unsigned icmplen, mblen; +#if NPF > 0 + struct pf_mtag *mtag; +#endif #ifdef ICMPPRINTFS if (icmpprintfs) @@ -251,13 +253,14 @@ icmp_do_error(struct mbuf *n, int type, int code, n_long dest, int destmtu) nip->ip_p = IPPROTO_ICMP; nip->ip_src = oip->ip_src; nip->ip_dst = oip->ip_dst; - /* move PF_GENERATED m_tag to new packet, if it exists */ - mtag = m_tag_find(n, PACKET_TAG_PF_GENERATED, NULL); - if (mtag != NULL) { - m_tag_unlink(n, mtag); - m_tag_prepend(m, mtag); +#if NPF > 0 + /* move PF_GENERATED to new packet, if existant XXX preserve more? */ + if ((mtag = pf_find_mtag(n)) != NULL && + mtag->flags & PF_TAG_GENERATED) { + mtag = pf_get_tag(m); + mtag->flags |= PF_TAG_GENERATED; } - +#endif m_freem(n); return (m); |