svn commit: r278828 - head/sys/netinet6
Bjoern A. Zeeb
bz at FreeBSD.org
Mon Feb 16 01:25:50 UTC 2015
> On 16 Feb 2015, at 01:12 , Gleb Smirnoff <glebius at freebsd.org> wrote:
>
> Author: glebius
> Date: Mon Feb 16 01:12:20 2015
> New Revision: 278828
> URL: https://svnweb.freebsd.org/changeset/base/278828
>
> Log:
> Factor out ip6_deletefraghdr() function, to be shared between IPv6
> stack and pf(4).
>
> Submitted by: Kristof Provost
> Reviewed by: ae
> Differential Revision: D1764
>
> Modified:
> head/sys/netinet6/frag6.c
> head/sys/netinet6/ip6_output.c
Why did it have to move file?
> head/sys/netinet6/ip6_var.h
>
> Modified: head/sys/netinet6/frag6.c
> ==============================================================================
> --- head/sys/netinet6/frag6.c Sun Feb 15 23:58:57 2015 (r278827)
> +++ head/sys/netinet6/frag6.c Mon Feb 16 01:12:20 2015 (r278828)
> @@ -541,27 +541,16 @@ insert:
> *q6->ip6q_nxtp = (u_char)(nxt & 0xff);
> #endif
>
> - /* Delete frag6 header */
> - if (m->m_len >= offset + sizeof(struct ip6_frag)) {
> - /* This is the only possible case with !PULLDOWN_TEST */
> - ovbcopy((caddr_t)ip6, (caddr_t)ip6 + sizeof(struct ip6_frag),
> - offset);
> - m->m_data += sizeof(struct ip6_frag);
> - m->m_len -= sizeof(struct ip6_frag);
> - } else {
> - /* this comes with no copy if the boundary is on cluster */
> - if ((t = m_split(m, offset, M_NOWAIT)) == NULL) {
> - frag6_remque(q6);
> - V_frag6_nfrags -= q6->ip6q_nfrag;
> + if (ip6_deletefraghdr(m, offset, M_NOWAIT) != 0) {
> + frag6_remque(q6);
> + V_frag6_nfrags -= q6->ip6q_nfrag;
> #ifdef MAC
> - mac_ip6q_destroy(q6);
> + mac_ip6q_destroy(q6);
> #endif
> - free(q6, M_FTABLE);
> - V_frag6_nfragpackets--;
> - goto dropfrag;
> - }
> - m_adj(t, sizeof(struct ip6_frag));
> - m_cat(m, t);
> + free(q6, M_FTABLE);
> + V_frag6_nfragpackets--;
> +
> + goto dropfrag;
> }
>
> /*
>
> Modified: head/sys/netinet6/ip6_output.c
> ==============================================================================
> --- head/sys/netinet6/ip6_output.c Sun Feb 15 23:58:57 2015 (r278827)
> +++ head/sys/netinet6/ip6_output.c Mon Feb 16 01:12:20 2015 (r278828)
> @@ -1206,6 +1206,30 @@ ip6_insertfraghdr(struct mbuf *m0, struc
> return (0);
> }
>
> +int
> +ip6_deletefraghdr(struct mbuf *m, int offset, int wait)
> +{
> + struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *);
> + struct mbuf *t;
> +
> + /* Delete frag6 header. */
> + if (m->m_len >= offset + sizeof(struct ip6_frag)) {
> + /* This is the only possible case with !PULLDOWN_TEST. */
> + bcopy(ip6, (char *)ip6 + sizeof(struct ip6_frag),
> + offset);
> + m->m_data += sizeof(struct ip6_frag);
> + m->m_len -= sizeof(struct ip6_frag);
> + } else {
> + /* This comes with no copy if the boundary is on cluster. */
> + if ((t = m_split(m, offset, wait)) == NULL)
> + return (ENOMEM);
> + m_adj(t, sizeof(struct ip6_frag));
> + m_cat(m, t);
> + }
> +
> + return (0);
> +}
> +
> static int
> ip6_getpmtu(struct route_in6 *ro_pmtu, struct route_in6 *ro,
> struct ifnet *ifp, struct in6_addr *dst, u_long *mtup,
>
> Modified: head/sys/netinet6/ip6_var.h
> ==============================================================================
> --- head/sys/netinet6/ip6_var.h Sun Feb 15 23:58:57 2015 (r278827)
> +++ head/sys/netinet6/ip6_var.h Mon Feb 16 01:12:20 2015 (r278828)
> @@ -388,6 +388,7 @@ int ip6_setpktopts(struct mbuf *, struct
> void ip6_clearpktopts(struct ip6_pktopts *, int);
> struct ip6_pktopts *ip6_copypktopts(struct ip6_pktopts *, int);
> int ip6_optlen(struct inpcb *);
> +int ip6_deletefraghdr(struct mbuf *, int, int);
>
> int route6_input(struct mbuf **, int *, int);
>
>
—
Bjoern A. Zeeb Charles Haddon Spurgeon:
"Friendship is one of the sweetest joys of life. Many might have failed
beneath the bitterness of their trial had they not found a friend."
More information about the svn-src-all
mailing list