Author: andre
Date: Wed Aug 18 17:39:47 2010
New Revision: 211462
URL: http://svn.freebsd.org/changeset/base/211462

Log:
  Untangle the net.inet.tcp.log_in_vain and net.inet.tcp.log_debug
  sysctl's and remove any side effects.
  
  Both sysctl's share the same backend infrastructure and due to the
  way it was implemented enabling net.inet.tcp.log_in_vain would also
  cause log_debug output to be generated.  This was surprising and
  eventually annoying to the user.
  
  The log output backend is kept the same but a little shim is inserted
  to properly separate log_in_vain and log_debug and to remove any side
  effects.
  
  PR:           kern/137317
  MFC after:    1 week

Modified:
  head/sys/netinet/tcp_input.c
  head/sys/netinet/tcp_subr.c
  head/sys/netinet/tcp_var.h

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c        Wed Aug 18 15:58:26 2010        
(r211461)
+++ head/sys/netinet/tcp_input.c        Wed Aug 18 17:39:47 2010        
(r211462)
@@ -571,7 +571,7 @@ findpcb:
                 */
                if ((tcp_log_in_vain == 1 && (thflags & TH_SYN)) ||
                    tcp_log_in_vain == 2) {
-                       if ((s = tcp_log_addrs(NULL, th, (void *)ip, ip6)))
+                       if ((s = tcp_log_vain(NULL, th, (void *)ip, ip6)))
                                log(LOG_INFO, "%s; %s: Connection attempt "
                                    "to closed port\n", s, __func__);
                }

Modified: head/sys/netinet/tcp_subr.c
==============================================================================
--- head/sys/netinet/tcp_subr.c Wed Aug 18 15:58:26 2010        (r211461)
+++ head/sys/netinet/tcp_subr.c Wed Aug 18 17:39:47 2010        (r211462)
@@ -268,6 +268,8 @@ VNET_DEFINE(uma_zone_t, sack_hole_zone);
 
 static struct inpcb *tcp_notify(struct inpcb *, int);
 static void    tcp_isn_tick(void *);
+static char *  tcp_log_addr(struct in_conninfo *inc, struct tcphdr *th,
+                   void *ip4hdr, const void *ip6hdr);
 
 /*
  * Target size of TCP PCB hash tables. Must be a power of two.
@@ -2234,9 +2236,33 @@ SYSCTL_PROC(_net_inet_tcp, TCPCTL_DROP, 
  * and ip6_hdr pointers have to be passed as void pointers.
  */
 char *
+tcp_log_vain(struct in_conninfo *inc, struct tcphdr *th, void *ip4hdr,
+    const void *ip6hdr)
+{
+
+       /* Is logging enabled? */
+       if (tcp_log_in_vain == 0)
+               return (NULL);
+
+       return (tcp_log_addr(inc, th, ip4hdr, ip6hdr));
+}
+
+char *
 tcp_log_addrs(struct in_conninfo *inc, struct tcphdr *th, void *ip4hdr,
     const void *ip6hdr)
 {
+
+       /* Is logging enabled? */
+       if (tcp_log_debug == 0)
+               return (NULL);
+
+       return (tcp_log_addr(inc, th, ip4hdr, ip6hdr));
+}
+
+static char *
+tcp_log_addr(struct in_conninfo *inc, struct tcphdr *th, void *ip4hdr,
+    const void *ip6hdr)
+{
        char *s, *sp;
        size_t size;
        struct ip *ip;
@@ -2259,10 +2285,6 @@ tcp_log_addrs(struct in_conninfo *inc, s
            2 * INET_ADDRSTRLEN;
 #endif /* INET6 */
 
-       /* Is logging enabled? */
-       if (tcp_log_debug == 0 && tcp_log_in_vain == 0)
-               return (NULL);
-
        s = malloc(size, M_TCPLOG, M_ZERO|M_NOWAIT);
        if (s == NULL)
                return (NULL);

Modified: head/sys/netinet/tcp_var.h
==============================================================================
--- head/sys/netinet/tcp_var.h  Wed Aug 18 15:58:26 2010        (r211461)
+++ head/sys/netinet/tcp_var.h  Wed Aug 18 17:39:47 2010        (r211462)
@@ -611,6 +611,8 @@ void         tcp_destroy(void);
 void    tcp_fini(void *);
 char   *tcp_log_addrs(struct in_conninfo *, struct tcphdr *, void *,
            const void *);
+char   *tcp_log_vain(struct in_conninfo *, struct tcphdr *, void *,
+           const void *);
 int     tcp_reass(struct tcpcb *, struct tcphdr *, int *, struct mbuf *);
 void    tcp_reass_init(void);
 #ifdef VIMAGE
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to