netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
To: davem@davemloft.net, netdev@vger.kernel.org
Cc: yoshfuji@linux-ipv6.org
Subject: [PATCH net-next 00/19] IPv6 NDISC Updates
Date: Tue, 22 Jan 2013 01:47:40 +0900	[thread overview]
Message-ID: <50FD712C.1050703@linux-ipv6.org> (raw)

This series of changes basically clean up NDISC logic,
especially on sender side.

We originally do For NS/NA/RS:
 1) build temporary ICMPv6 header
 2) ndisc_build_skb() with temporary ICMPv6 header and rather
    criptic arguments.
    - Calculate total length and allocate sk_buff
    - Build IPv6 header.
    - copy ICMPv6 header, additional data and ND options.
    - Fill-in ICMPv6 checksum.
    Here, structures defined for message format was not used
    at all, it is difficult to understand what is being sent,
    and it was not generic.
 3) __ndisc_send()
    - Allocate temporary dst.
    - Send it.

Several issues:
- We could not defer decision if we should/can send some ND
  option.
- It is hard to see the packet format at a glance.
- ICMPv6 header was built as temporary variable, and then
  copied to the buffer.
- Some code path for Redirect was not shared.

With these patches, we do:
 1) Calculate (or estimate) message length and option length.
 2) Allocate skb (via new ndisc_skb_alloc()).
 3) Fill-in ICMPv6 message directly using compound literals.
 4) Fill-in ICMPv6 checksum
 5) Build IPv6 header (including length)
 6) Send the packet (via ndisc_send_skb()).
    - allocate temporary dst and send it.

- We can defer calculating real length of the packet.
  For example, we can give up filling some option at when
  filling in.
- Message is built directly without temporary buffer.
- Structures defined for message format is easier to understand
  what is being built.
- NS/NA/RS/Redirect share same logic.
- Reduced code/data size:
	   text	   data	    bss	    dec	    hex	filename
	 265407	  14133	   3488	 283028	  45194	old/net/ipv6/ipv6.o
	 264955	  14109	   3488	 282552	  44fb8	new/net/ipv6/ipv6.o

YOSHIFUJI Hideaki (19):
  ndisc: Reduce number of arguments for ndisc_fill_addr_option().
  ndisc: Move ndisc_opt_addr_space() to include/net/ndisc.h.
  ndisc: Use skb_linearize() instead of pskb_may_pull(skb, skb->len).
  ndisc: Introduce ndisc_fill_redirect_hdr_option().
  ndisc: Introduce ndisc_alloc_skb() helper.
  ipv6: Unshare ip6_nd_hdr() and change return type to void.
  ndisc: Simplify arguments for ip6_nd_hdr().
  ndisc: Set skb->dev and skb->protocol inside ndisc_alloc_skb().
  ndisc: Remove dev argument for ndisc_send_skb().
  ndisc: Defer building IPv6 header.
  ndisc: Reset skb->trasport_headner inside ndisc_alloc_send_skb().
  ndisc: Calculate message body length and option length separately.
  ndisc: Make ndisc_fill_xxx_option() for sk_buff.
  ndisc: Remove icmp6h argument from ndisc_send_skb().
  ndisc: Use ndisc_send_skb() for redirect.
  ndisc: Fill in ICMPv6 checksum and IPv6 header in ndisc_send_skb().
  ndisc: Break down __ndisc_send().
  ndisc: Break down ndisc_build_skb() and build message directly.
  ndisc: Use compound literals to build redirect message.

 include/net/ipv6.h    |    7 --
 include/net/ndisc.h   |    8 +-
 net/ipv6/ip6_output.c |   33 -----
 net/ipv6/mcast.c      |   29 ++++-
 net/ipv6/ndisc.c      |  331 +++++++++++++++++++++++++------------------------
 5 files changed, 203 insertions(+), 205 deletions(-)

-- 
1.7.9.5

             reply	other threads:[~2013-01-21 16:47 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-21 16:47 YOSHIFUJI Hideaki [this message]
2013-01-21 18:35 ` [PATCH net-next 00/19] IPv6 NDISC Updates David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50FD712C.1050703@linux-ipv6.org \
    --to=yoshfuji@linux-ipv6.org \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).