Heads up --- Thinking about UDP and tunneling
Bruce Evans
brde at optusnet.com.au
Wed Dec 24 04:46:24 PST 2008
On Tue, 23 Dec 2008, Randall Stewart wrote:
> 4) revamped my s9indent use.. I ran it and then patched back
> in just its complaints about me... that way the other s9 issues
> can stay in the file untouched by me :-D
Thanks, but it still has many of the style bugs already pointed out
and a few new ones. Please fix them and s9indent so that they don't
get pointed out again :-).
% Index: netinet/udp_usrreq.c
% ===================================================================
% --- netinet/udp_usrreq.c (revision 185928)
% +++ netinet/udp_usrreq.c (working copy)
% @@ -488,41 +488,76 @@
% struct mbuf *n;
%
% n = m_copy(m, 0, M_COPYALL);
% - if (n != NULL)
% - udp_append(last, ip, n, iphlen +
% - sizeof(struct udphdr), &udp_in);
% - INP_RUNLOCK(last);
% +
Extra blank line.
% + if (last->inp_ppcb == NULL) {
% + if (n != NULL)
% + udp_append(last, ip, n, iphlen +
% + sizeof(struct udphdr), &udp_in);
Line too long.
% + INP_RUNLOCK(last);
% + } else {
% + /*
% + * Engage the tunneling protocol we
% + * will have to leave the info_lock
% + * up, since we are hunting through
% + * multiple UDP inp's hope we don't
% + * break :-(
Missing punctuation.
% + *
% + * XXXML: Maybe add a flag to the
% + * prototype so that the tunneling
% + * can defer work that can't be done
% + * under the info lock?
% + */
% + udp_tunnel_func_t tunnel_func;
This typedef is very verbose...
% +
% + tunnel_func = (udp_tunnel_func_t) last->inp_ppcb;
... line too long, caused by the verbose typedef.
Casts are not followed by a space in KNF. This style bug is made fairly
consistently in this patch.
Bogus cast (depends on undefined behaviour to save space).
% + tunnel_func(m, iphlen, last);
% + INP_RUNLOCK(last);
% + }
% }
% last = inp;
% /*
% - * Don't look for additional matches if this one does
% - * not have either the SO_REUSEPORT or SO_REUSEADDR
% - * socket options set. This heuristic avoids
% - * searching through all pcbs in the common case of a
% - * non-shared port. It assumes that an application
% - * will never clear these options after setting them.
% + * Don't look for additional matches if this one
% + * does not have either the SO_REUSEPORT or
% + * SO_REUSEADDR socket options set. This heuristic
% + * avoids searching through all pcbs in the common
% + * case of a non-shared port. It assumes that an
% + * application will never clear these options after
% + * setting them.
% */
% if ((last->inp_socket->so_options &
% - (SO_REUSEPORT|SO_REUSEADDR)) == 0)
% + (SO_REUSEPORT | SO_REUSEADDR)) == 0)
You didn't have to touch this statement. Touching it improves it.
% break;
% }
%
% if (last == NULL) {
% /*
% - * No matching pcb found; discard datagram. (No need
% - * to send an ICMP Port Unreachable for a broadcast
% - * or multicast datgram.)
% + * No matching pcb found; discard datagram. (No
% + * need to send an ICMP Port Unreachable for a
% + * broadcast or multicast datgram.)
You didn't have to touch this. Touching it unimproves it.
% ...
% }
% -
% /*
% * Locate pcb for datagram.
% */
% @@ -553,7 +588,6 @@
% INP_INFO_RUNLOCK(&V_udbinfo);
% return;
% }
% -
% /*
% * Check the minimum TTL for socket.
% */
You didn't have to touch these. Touching them arguably unimproves them,
though strict KNF probably doesn't permit these blank lines.
% @@ -563,6 +597,18 @@
% INP_RUNLOCK(inp);
% goto badunlocked;
% }
% + if (inp->inp_ppcb) {
It is preferable to compare pointers explicitly with NULL. The previous
comparision of inp_ppcb in this patch is explicit (but it is for equality).
This and all of the following comparisions are implicit (for inequality).
% @@ -1138,10 +1184,41 @@
% INP_INFO_WUNLOCK(&V_udbinfo);
% inp->inp_vflag |= INP_IPV4;
% inp->inp_ip_ttl = V_ip_defttl;
% + /*
% + * UDP does not have a per-protocol
% + * pcb (inp->inp_ppcb). We use this
% + * pointer for kernel tunneling pointer.
% + * If we ever need to have a protocol
% + * block we will need to move this
% + * function pointer there. Null
% + * in this pointer means "do the normal
% + * thing".
% + */
Lines too short (formatted for 50-column terminals).
Normal entence breaks are 2 spaces, not 1 as in this comment. Most of the
other comments in this patch have normal sentence breakes.
% ...
% +int
% +udp_set_kernel_tunneling(struct socket *so, udp_tunnel_func_t f)
% +{
% + struct inpcb *inp;
Missing blank line after declarations.
% + inp = (struct inpcb *)so->so_pcb;
% +
Extra blank line.
% + if (so->so_type != SOCK_DGRAM) {
% + /* Not UDP socket... sorry */
Missing punctuation.
% Index: netinet/udp_var.h
% ===================================================================
% --- netinet/udp_var.h (revision 185928)
% +++ netinet/udp_var.h (working copy)
% @@ -107,6 +107,10 @@
% void udp_input(struct mbuf *, int);
% struct inpcb *udp_notify(struct inpcb *inp, int errno);
% int udp_shutdown(struct socket *so);
% +
% +
% +typedef void(*udp_tunnel_func_t)(struct mbuf *, int off, struct inpcb *);
% +int udp_set_kernel_tunneling(struct socket *so, udp_tunnel_func_t f);
% #endif
%
% #endif
Still has a style bug density of about 5 per line :-(.
% Index: netinet6/udp6_usrreq.c
Similarly.
Bruce
More information about the freebsd-net
mailing list