From b39e39fe56f51b47880490f3cd2f41ace731766b Mon Sep 17 00:00:00 2001 From: Giuseppe Lettieri Date: Fri, 11 May 2012 14:11:00 +0200 Subject: [PATCH] fix compilation on FreeBSD --- lib/vlandev.c | 2 +- ofproto/ofproto-dpif-sflow.c | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/vlandev.c b/lib/vlandev.c index 736b77947..d6a7b56df 100644 --- a/lib/vlandev.c +++ b/lib/vlandev.c @@ -23,13 +23,13 @@ #include #include "hash.h" -#include "rtnetlink-link.h" #include "shash.h" #include "vlog.h" VLOG_DEFINE_THIS_MODULE(vlandev); #ifdef __linux__ +#include "rtnetlink-link.h" #include #include #include "netdev-linux.h" diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c index 73da2af6a..3865ad8b0 100644 --- a/ofproto/ofproto-dpif-sflow.c +++ b/ofproto/ofproto-dpif-sflow.c @@ -18,7 +18,9 @@ #include #include "ofproto-dpif-sflow.h" #include +#ifdef HAVE_NETLINK #include +#endif /* HAVE_NETLINK */ #include #include "collectors.h" #include "compiler.h" @@ -31,7 +33,9 @@ #include "ofproto.h" #include "packets.h" #include "poll-loop.h" +#ifdef HAVE_NETLINK #include "route-table.h" +#endif /* HAVE_NETLINK */ #include "sflow_api.h" #include "socket-util.h" #include "timeval.h" @@ -229,18 +233,35 @@ sflow_agent_get_counters(void *ds_, SFLPoller *poller, * specified then it is figured out by taking a look at the routing table based * on 'targets'. */ static bool +#ifndef HAVE_NETLINK +sflow_choose_agent_address(const char *agent_device, const char *control_ip, + SFLAddress *agent_addr) +#else sflow_choose_agent_address(const char *agent_device, const struct sset *targets, const char *control_ip, SFLAddress *agent_addr) +#endif /* HAVE_NETLINK */ { +#ifdef HAVE_NETLINK const char *target; +#endif /* HAVE_NETLINK */ struct in_addr in4; memset(agent_addr, 0, sizeof *agent_addr); agent_addr->type = SFLADDRESSTYPE_IP_V4; if (agent_device) { +#ifndef HAVE_NETLINK + struct netdev *netdev; + + if (!netdev_open(agent_device, "system", &netdev)) { + int error = netdev_get_in4(netdev, &in4, NULL); + netdev_close(netdev); + if (!error) { + goto success; + } +#else if (!netdev_get_in4_by_name(agent_device, &in4)) { goto success; } @@ -254,6 +275,7 @@ sflow_choose_agent_address(const char *agent_device, && route_table_get_name(sin.sin_addr.s_addr, name) && !netdev_get_in4_by_name(name, &in4)) { goto success; +#endif /* HAVE_NETLINK */ } } @@ -301,8 +323,10 @@ dpif_sflow_create(struct dpif *dpif) ds->next_tick = time_now() + 1; hmap_init(&ds->ports); ds->probability = 0; +#ifdef HAVE_NETLINK route_table_register(); +#endif /* HAVE_NETLINK */ return ds; } @@ -321,7 +345,9 @@ dpif_sflow_destroy(struct dpif_sflow *ds) if (ds) { struct dpif_sflow_port *dsp, *next; +#ifdef HAVE_NETLINK route_table_unregister(); +#endif /* HAVE_NETLINK */ dpif_sflow_clear(ds); HMAP_FOR_EACH_SAFE (dsp, next, hmap_node, &ds->ports) { dpif_sflow_del_port__(ds, dsp); @@ -433,6 +459,7 @@ dpif_sflow_set_options(struct dpif_sflow *ds, } } +#ifdef HAVE_NETLINK /* Choose agent IP address and agent device (if not yet setup) */ if (!sflow_choose_agent_address(options->agent_device, &options->targets, @@ -441,6 +468,7 @@ dpif_sflow_set_options(struct dpif_sflow *ds, return; } +#endif /* HAVE_NETLINK */ /* Avoid reconfiguring if options didn't change. */ if (!options_changed) { return; @@ -448,6 +476,15 @@ dpif_sflow_set_options(struct dpif_sflow *ds, ofproto_sflow_options_destroy(ds->options); ds->options = ofproto_sflow_options_clone(options); +#ifndef HAVE_NETLINK + /* Choose agent IP address. */ + if (!sflow_choose_agent_address(options->agent_device, + options->control_ip, &agentIP)) { + dpif_sflow_clear(ds); + return; + } + +#endif /* HAVE_NETLINK */ /* Create agent. */ VLOG_INFO("creating sFlow agent %d", options->sub_id); if (ds->sflow_agent) { @@ -576,7 +613,9 @@ dpif_sflow_run(struct dpif_sflow *ds) { if (dpif_sflow_is_enabled(ds)) { time_t now = time_now(); +#ifdef HAVE_NETLINK route_table_run(); +#endif /* HAVE_NETLINK */ if (now >= ds->next_tick) { sfl_agent_tick(ds->sflow_agent, time_wall()); ds->next_tick = now + 1; -- 2.47.0