this has been commited, thanks! Nathanael Rensen([email protected]) on 2014.01.18 23:49:26 +0800: > Some time ago I proposed a diff to allow pflow(4) to determine the src IP > address based on the route table if flowsrc was not specified. That diff > was not accepted because having multiple places look up route tables is > undesirable. > > Since then henning@ moved UDP checksum calcs into ip_output. That makes > it very simple to allow the pflow flowsrc parameter to be optional. This > diff permits the flowsrc parameter to be unspecified, as was permitted > prior to version 1.35 of if_flow.c, except that now, thanks to henning@, > it works. > > Nathanael > > > Index: sbin/ifconfig/ifconfig.8 > =================================================================== > RCS file: /cvs/src/sbin/ifconfig/ifconfig.8,v > retrieving revision 1.237 > diff -u -p -u -p -r1.237 ifconfig.8 > --- sbin/ifconfig/ifconfig.8 13 Oct 2013 10:45:34 -0000 1.237 > +++ sbin/ifconfig/ifconfig.8 15 Jan 2014 18:20:18 -0000 > @@ -1224,12 +1224,11 @@ Pflow data will be sent to this address/ > Unset the receiver address and stop sending pflow data. > .It Cm flowsrc Ar addr > Set the source IP address for pflow packets. > -Must be defined to export pflow data. > .Ar addr > is the IP address used as sender of the UDP packets and may be used to > identify the source of the data on the pflow collector. > .It Fl flowsrc > -Unset the source address and stop sending pflow data. > +Unset the source address. > .It Cm pflowproto Ar n > Set the protocol version. > The default is version 5. > Index: sbin/ifconfig/ifconfig.c > =================================================================== > RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v > retrieving revision 1.280 > diff -u -p -u -p -r1.280 ifconfig.c > --- sbin/ifconfig/ifconfig.c 1 Dec 2013 10:05:29 -0000 1.280 > +++ sbin/ifconfig/ifconfig.c 15 Jan 2014 18:20:18 -0000 > @@ -3879,8 +3879,9 @@ pflow_status(void) > if (ioctl(s, SIOCGETPFLOW, (caddr_t)&ifr) == -1) > return; > > - printf("\tpflow: sender: %s ", preq.sender_ip.s_addr != INADDR_ANY ? > - inet_ntoa(preq.sender_ip) : "INVALID"); > + printf("\tpflow: "); > + if (preq.sender_ip.s_addr != INADDR_ANY) > + printf("sender: %s ", inet_ntoa(preq.sender_ip)); > printf("receiver: %s:", preq.receiver_ip.s_addr != INADDR_ANY ? > inet_ntoa(preq.receiver_ip) : "INVALID"); > if (preq.receiver_port == 0) > Index: share/man/man4/pflow.4 > =================================================================== > RCS file: /cvs/src/share/man/man4/pflow.4,v > retrieving revision 1.16 > diff -u -p -u -p -r1.16 pflow.4 > --- share/man/man4/pflow.4 14 Sep 2013 14:54:30 -0000 1.16 > +++ share/man/man4/pflow.4 15 Jan 2014 18:20:18 -0000 > @@ -42,8 +42,7 @@ Multiple > interfaces can be created at runtime using the > .Ic ifconfig pflow Ns Ar N Ic create > command. > -Each interface must be configured with a flow sender IP address, > -a flow receiver IP address, > +Each interface must be configured with a flow receiver IP address > and a flow receiver port number. > .Pp > Only states created by a rule marked with the > @@ -92,8 +91,6 @@ collector. > .Cm flowdst > defines the collector IP address and the port. > The > -.Cm flowsrc > -IP address and > .Cm flowdst > IP address and port must be defined to enable the export of flows. > .Pp > Index: sys/net/if_pflow.c > =================================================================== > RCS file: /cvs/src/sys/net/if_pflow.c,v > retrieving revision 1.38 > diff -u -p -u -p -r1.38 if_pflow.c > --- sys/net/if_pflow.c 1 Nov 2013 14:34:27 -0000 1.38 > +++ sys/net/if_pflow.c 15 Jan 2014 18:20:23 -0000 > @@ -426,7 +426,6 @@ pflowioctl(struct ifnet *ifp, u_long cmd > if ((ifp->if_flags & IFF_UP) && > sc->sc_receiver_ip.s_addr != INADDR_ANY && > sc->sc_receiver_port != 0 && > - sc->sc_sender_ip.s_addr != INADDR_ANY && > sc->sc_sender_port != 0) { > ifp->if_flags |= IFF_RUNNING; > sc->sc_gcounter=pflowstats.pflow_flows; > @@ -506,7 +505,6 @@ pflowioctl(struct ifnet *ifp, u_long cmd > if ((ifp->if_flags & IFF_UP) && > sc->sc_receiver_ip.s_addr != INADDR_ANY && > sc->sc_receiver_port != 0 && > - sc->sc_sender_ip.s_addr != INADDR_ANY && > sc->sc_sender_port != 0) { > ifp->if_flags |= IFF_RUNNING; > sc->sc_gcounter=pflowstats.pflow_flows; >
--
