#include <vnet/vnet.h>
-#include <builtinurl/builtinurl.h>
#include <http_static/http_static.h>
#include <mactime/mactime.h>
#include <vlib/unix/plugin.h>
+#include <vnet/ip-neighbor/ip_neighbor.h>
-static int
-handle_get_mactime (u8 * request, http_session_t * hs)
+static walk_rc_t
+mactime_ip_neighbor_copy (index_t ipni, void *ctx)
+{
+ mactime_main_t *mm = ctx;
+
+ vec_add1 (mm->arp_cache_copy, ipni);
+
+ return (WALK_CONTINUE);
+}
+
+static hss_url_handler_rc_t
+handle_get_mactime (hss_url_handler_args_t *args)
{
mactime_main_t *mm = &mactime_main;
mactime_device_t *dp;
int i, j;
f64 now;
vlib_counter_t allow, drop;
- ethernet_arp_ip4_entry_t *n, *pool;
+ ip_neighbor_t *n;
char *q = "\"";
u8 *s = 0;
int need_comma = 0;
+ /* Walk all ip4 neighbours on all interfaces */
vec_reset_length (mm->arp_cache_copy);
- pool = ip4_neighbors_pool ();
-
- pool_foreach (n, pool, (
- {
- vec_add1 (mm->arp_cache_copy, n[0]);}));
+ ip_neighbor_walk (AF_IP4, ~0, mactime_ip_neighbor_copy, mm);
now = clib_timebase_now (&mm->timebase);
if (PREDICT_FALSE ((now - mm->sunday_midnight) > 86400.0 * 7.0))
mm->sunday_midnight = clib_timebase_find_sunday_midnight (now);
- /* *INDENT-OFF* */
- pool_foreach (dp, mm->devices,
- ({
- vec_add1 (pool_indices, dp - mm->devices);
- }));
- /* *INDENT-ON* */
+ pool_foreach (dp, mm->devices)
+ {
+ vec_add1 (pool_indices, dp - mm->devices);
+ }
s = format (s, "{%smactime%s: [\n", q, q);
for (j = 0; j < vec_len (mm->arp_cache_copy); j++)
{
- n = mm->arp_cache_copy + j;
- if (!memcmp (dp->mac_address, n->mac.bytes, sizeof (n->mac)))
+ n = ip_neighbor_get (mm->arp_cache_copy[j]);
+ if (!memcmp (dp->mac_address,
+ ip_neighbor_get_mac (n), sizeof (mac_address_t)))
{
s = format (s, ", %sip4_address%s: %s%U%s", q, q,
- q, format_ip4_address, &n->ip4_address, q);
+ q, format_ip46_address,
+ ip_neighbor_get_ip (n), IP46_TYPE_IP4, q);
break;
}
}
vec_free (macstring);
vec_free (pool_indices);
- hs->data = s;
- hs->data_offset = 0;
- hs->cache_pool_index = ~0;
- hs->free_data = 1;
- return 0;
+ args->data = s;
+ args->data_len = vec_len (s);
+ args->free_vec_data = 1;
+ return HSS_URL_HANDLER_OK;
}
void
mactime_url_init (vlib_main_t * vm)
{
- void (*fp) (void *, char *, int);
+ hss_register_url_fn fp;
/* Look up the builtin URL registration handler */
fp = vlib_get_plugin_symbol ("http_static_plugin.so",
- "http_static_server_register_builtin_handler");
+ "hss_register_url_handler");
if (fp == 0)
{
return;
}
- (*fp) (handle_get_mactime, "mactime.json", HTTP_BUILTIN_METHOD_GET);
+ (*fp) (handle_get_mactime, "mactime.json", HTTP_REQ_GET);
}
/*