[ovs-dev] [PATCH 1/2] vswitchd: Allow user to directly specify sFlow agent address.

Ben Pfaff blp at ovn.org
Tue Apr 10 19:23:12 UTC 2018


It's currently IPv4 only but it's a good idea to add IPv6 support.  I'll
put that on my to-do list.

It's also a good idea to warn about the potential perils of this
feature.  I'll do that too.

I'll try to get to this soon, neither feature should be much work.

On Tue, Apr 10, 2018 at 10:13:24AM -0700, Neil McKee wrote:
> No objections.  Sounds useful for testing,  and for situations where
> the agent-address selection has been made by a higher controller.
> Just one question: it seems like it is only IPv4: can an IPv6
> agent-address be configured this way too?
> 
> I'll admit to this triggering bad memories of a situation when two
> switches were sending sFlow using each other's agent address,  so
> perhaps a warning not to use this "manually" would be appropriate?
> 
> ------
> Neil McKee
> InMon Corp.
> http://www.inmon.com
> 
> 
> On Sat, Mar 31, 2018 at 5:12 PM, Ben Pfaff <blp at ovn.org> wrote:
> > At least for testing purposes, and perhaps in production, it is useful to
> > be able to fix the agent IP address directly, rather that indirecting it
> > through a device name or the routing table.
> >
> > This commit uses this feature to fix the agent IP address used in the unit
> > tests.  This will be particularly useful in an upcoming commit that
> > disables the use of the system routing table in the unit tests, to make
> > the tests' results independent of the host's routes.
> >
> > CC: Neil McKee <neil.mckee at inmon.com>
> > Signed-off-by: Ben Pfaff <blp at ovn.org>
> > ---
> >  ofproto/ofproto-dpif-sflow.c |  3 ++-
> >  tests/ofproto-dpif.at        |  8 ++++----
> >  vswitchd/vswitch.xml         | 25 ++++++++++++++++++-------
> >  3 files changed, 24 insertions(+), 12 deletions(-)
> >
> > diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c
> > index 60e1b4e0a661..5d8c0e19f8e3 100644
> > --- a/ofproto/ofproto-dpif-sflow.c
> > +++ b/ofproto/ofproto-dpif-sflow.c
> > @@ -453,7 +453,8 @@ sflow_choose_agent_address(const char *agent_device,
> >      agent_addr->type = SFLADDRESSTYPE_IP_V4;
> >
> >      if (agent_device) {
> > -        if (!netdev_get_in4_by_name(agent_device, &in4)) {
> > +        if (!netdev_get_in4_by_name(agent_device, &in4)
> > +            || !lookup_ip(agent_device, &in4)) {
> >              goto success;
> >          }
> >      }
> > diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
> > index d2058eddd3eb..60f28e2a08dd 100644
> > --- a/tests/ofproto-dpif.at
> > +++ b/tests/ofproto-dpif.at
> > @@ -6333,7 +6333,7 @@ ovs-vsctl \
> >        set Interface p1 options:ifindex=1003 --                 \
> >        set Bridge br0 sflow=@sf --                              \
> >        --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\"  \
> > -      header=128 sampling=1 polling=1
> > +      header=128 sampling=1 polling=1 agent=127.0.0.1
> >
> >  dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
> >  AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
> > @@ -6382,7 +6382,7 @@ AT_CHECK([ovs-ofctl add-flow br0 action=3])
> >  dnl enable sflow
> >  ovs-vsctl \
> >     set Bridge br0 sflow=@sf -- \
> > -   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
> > +   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" agent=127.0.0.1 \
> >       header=128 sampling=1 polling=0
> >
> >  dnl introduce a packet that will be flooded to the tunnel
> > @@ -6474,7 +6474,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8
> >  dnl configure sflow on int-br only
> >  ovs-vsctl \
> >     set Bridge int-br sflow=@sf -- \
> > -   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
> > +   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" agent=127.0.0.1 \
> >       header=128 sampling=1 polling=0
> >
> >  dnl set up route to 192.168.1.2 via br0
> > @@ -6553,7 +6553,7 @@ ovs-appctl time/stop
> >  dnl configure sflow
> >  ovs-vsctl \
> >     set Bridge br0 sflow=@sf -- \
> > -   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
> > +   --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" agent=127.0.0.1 \
> >       header=128 sampling=1 polling=0
> >
> >  AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
> > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
> > index f899a19764a4..9c2a8263e604 100644
> > --- a/vswitchd/vswitch.xml
> > +++ b/vswitchd/vswitch.xml
> > @@ -5099,13 +5099,24 @@ ovs-vsctl add-port br0 p0 -- set Interface p0 type=patch options:peer=p1 \
> >      monitoring of switches.</p>
> >
> >      <column name="agent">
> > -      Name of the network device whose IP address should be reported as the
> > -      ``agent address'' to collectors.  If not specified, the agent device is
> > -      figured from the first target address and the routing table.  If the
> > -      routing table does not contain a route to the target, the IP address
> > -      defaults to the <ref table="Controller" column="local_ip"/> in the
> > -      collector's <ref table="Controller"/>.  If an agent IP address cannot be
> > -      determined any of these ways, sFlow is disabled.
> > +      <p>
> > +        Determines the agent address, that is, the IP address reported to
> > +        collectors as the source of the sFlow data.  It may be an IP address or
> > +        the name of a network device.  In the latter case, the network device's
> > +        IP address is used,
> > +      </p>
> > +
> > +      <p>
> > +        If not specified, the agent device is figured from the first target
> > +        address and the routing table.  If the routing table does not contain a
> > +        route to the target, the IP address defaults to the <ref
> > +        table="Controller" column="local_ip"/> in the collector's <ref
> > +        table="Controller"/>.
> > +      </p>
> > +
> > +      <p>
> > +        If an agent IP address cannot be determined, sFlow is disabled.
> > +      </p>
> >      </column>
> >
> >      <column name="header">
> > --
> > 2.16.1
> >


More information about the dev mailing list