The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Macros | Functions | Variables
radsniff.c File Reference

Capture, filter, and generate statistics for RADIUS traffic. More...

#include <fcntl.h>
#include <time.h>
#include <math.h>
#include <freeradius-devel/autoconf.h>
#include <freeradius-devel/radius/list.h>
#include <freeradius-devel/util/conf.h>
#include <freeradius-devel/util/event.h>
#include <freeradius-devel/util/file.h>
#include <freeradius-devel/util/syserror.h>
#include <freeradius-devel/util/atexit.h>
#include <freeradius-devel/util/pair_legacy.h>
#include <freeradius-devel/util/base16.h>
#include <freeradius-devel/util/pcap.h>
#include <freeradius-devel/util/timeval.h>
#include "radsniff.h"
+ Include dependency graph for radsniff.c:

Go to the source code of this file.

Macros

#define RS_ASSERT(_x)   if (!(_x) && !fr_cond_assert(_x)) exit(1)
 
#define RS_CLEANUP_NOW(_x, _s)
 

Functions

static int _request_free (rs_request_t *request)
 
static void _rs_event (UNUSED fr_event_list_t *el, UNUSED fr_time_t now, void *ctx)
 
static int _rs_event_status (UNUSED fr_time_t now, fr_time_delta_t wake_t, UNUSED void *uctx)
 
static void _unmark_link (void *request)
 Callback for when the request is removed from the link tree. More...
 
static void _unmark_request (void *request)
 Callback for when the request is removed from the request tree. More...
 
int main (int argc, char *argv[])
 
static int rs_build_dict_list (fr_dict_attr_t const **out, size_t len, char *list)
 
static int rs_build_event_flags (int *flags, fr_table_num_sorted_t const *map, size_t map_len, char *list)
 
static int rs_build_filter (fr_pair_list_t *out, char const *filter)
 
static int rs_check_pcap_drop (fr_pcap_t *in)
 Query libpcap to see if it dropped any packets. More...
 
static void rs_daemonize (char const *pidfile)
 Fork and kill the parent process, writing out our PID. More...
 
static int rs_get_pairs (TALLOC_CTX *ctx, fr_pair_list_t *out, fr_pair_list_t *vps, fr_dict_attr_t const *da[], int num)
 Copy a subset of attributes from one list into the other. More...
 
static void rs_got_packet (fr_event_list_t *el, int fd, UNUSED int flags, void *ctx)
 
static int rs_install_stats_processor (rs_stats_t *stats, fr_event_list_t *el, fr_pcap_t *in, struct timeval *now, bool live)
 
static void rs_packet_cleanup (rs_request_t *request)
 
static int8_t rs_packet_cmp (void const *one, void const *two)
 Wrapper around fr_packet_cmp to strip off the outer request struct. More...
 
static void rs_packet_print (rs_request_t *request, uint64_t count, rs_status_t status, fr_pcap_t *handle, fr_packet_t *packet, fr_pair_list_t *list, struct timeval *elapsed, struct timeval *latency, bool response, bool body)
 
static void rs_packet_print_csv (uint64_t count, rs_status_t status, fr_pcap_t *handle, fr_packet_t *packet, fr_pair_list_t *list, UNUSED struct timeval *elapsed, struct timeval *latency, UNUSED bool response, bool body)
 
static void rs_packet_print_csv_header (void)
 
static void rs_packet_print_fancy (uint64_t count, rs_status_t status, fr_pcap_t *handle, fr_packet_t *packet, fr_pair_list_t *list, struct timeval *elapsed, struct timeval *latency, bool response, bool body)
 
static void rs_packet_process (uint64_t count, rs_event_t *event, struct pcap_pkthdr const *header, uint8_t const *data)
 
static void rs_packet_save_in_output_dir (uint64_t count, UNUSED rs_status_t status, UNUSED fr_pcap_t *handle, fr_packet_t *packet, fr_pair_list_t *list, UNUSED struct timeval *elapsed, UNUSED struct timeval *latency, bool response, bool body)
 
static rs_request_trs_request_alloc (TALLOC_CTX *ctx)
 
static int rs_request_to_pcap (rs_event_t *event, rs_request_t *request, struct pcap_pkthdr const *header, uint8_t const *data)
 
static int rs_response_to_pcap (rs_event_t *event, rs_request_t *request, struct pcap_pkthdr const *header, uint8_t const *data)
 
static int8_t rs_rtx_cmp (void const *one, void const *two)
 Compare requests using packet info and lists of attributes. More...
 
static void rs_signal_action (UNUSED fr_event_list_t *list, int fd, int UNUSED flags, UNUSED void *ctx)
 Read the last signal from the signal pipe. More...
 
static void rs_signal_self (int sig)
 Write the last signal to the signal pipe. More...
 
static size_t rs_snprint_csv (char *out, size_t outlen, char const *in, size_t inlen)
 
static ssize_t rs_stats_print_code_csv (char *out, size_t outlen, rs_latency_t *stats)
 
static void rs_stats_print_code_fancy (rs_latency_t *stats, fr_radius_packet_code_t code)
 
static void rs_stats_print_csv (rs_update_t *this, rs_stats_t *stats, UNUSED struct timeval *now)
 
static void rs_stats_print_csv_header (rs_update_t *this)
 
static void rs_stats_print_fancy (rs_update_t *this, rs_stats_t *stats, struct timeval *now)
 
static void rs_stats_process (fr_event_list_t *el, fr_time_t now_t, void *ctx)
 Process stats for a single interval. More...
 
static void rs_stats_process_counters (rs_latency_t *stats)
 
static void rs_stats_process_latency (rs_latency_t *stats)
 Update smoothed average. More...
 
static void rs_stats_update_latency (rs_latency_t *stats, struct timeval *latency)
 Update latency statistics for request/response and forwarded packets. More...
 
static void rs_time_print (char *out, size_t len, struct timeval const *t)
 
static void rs_tv_add_ms (struct timeval const *start, unsigned long interval, struct timeval *result)
 
static void timeout_event (fr_event_list_t *el, UNUSED fr_time_t now_t, UNUSED void *ctx)
 Exit the event loop after a given timeout. More...
 
static NEVER_RETURNS void usage (int status)
 

Variables

static fr_dict_attr_t const * attr_packet_type
 
static bool cleanup
 
static rs_tconf
 
static fr_dict_t const * dict_freeradius
 
static fr_dict_t const * dict_radius
 
static fr_event_list_tevents
 
static fr_rb_tree_tlink_tree = NULL
 
static int packets_count = 1
 
fr_dict_autoload_t radsniff_dict []
 
fr_dict_attr_autoload_t radsniff_dict_attr []
 
static char const * radsniff_version = RADIUSD_VERSION_BUILD("radsniff")
 
static fr_rb_tree_trequest_tree = NULL
 
static fr_table_num_sorted_t const rs_events []
 
static size_t rs_events_len = NUM_ELEMENTS(rs_events)
 
static int rs_useful_codes []
 
static int self_pipe [2] = {-1, -1}
 Signals from sig handlers. More...
 
static struct timeval start_pcap = {0, 0}
 
static char timestr [50]
 
static const uint8_t zeros [RADIUS_AUTH_VECTOR_LENGTH] = {}
 

Detailed Description

Capture, filter, and generate statistics for RADIUS traffic.

Id
86b3f3a9b7377b64f24cb1d9e44abf38ab4034f4

Definition in file radsniff.c.

Macro Definition Documentation

◆ RS_ASSERT

#define RS_ASSERT (   _x)    if (!(_x) && !fr_cond_assert(_x)) exit(1)

Definition at line 51 of file radsniff.c.

◆ RS_CLEANUP_NOW

#define RS_CLEANUP_NOW (   _x,
  _s 
)
Value:
{\
_x->silent_cleanup = _s;\
_x->when = header->ts;\
rs_packet_cleanup(_x);\
_x = NULL;\
} while (0)

Definition at line 1239 of file radsniff.c.

Function Documentation

◆ _request_free()

static int _request_free ( rs_request_t request)
static

Definition at line 1028 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _rs_event()

static void _rs_event ( UNUSED fr_event_list_t el,
UNUSED fr_time_t  now,
void *  ctx 
)
static

Definition at line 1132 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _rs_event_status()

static int _rs_event_status ( UNUSED fr_time_t  now,
fr_time_delta_t  wake_t,
UNUSED void *  uctx 
)
static

Definition at line 2019 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _unmark_link()

static void _unmark_link ( void *  request)
static

Callback for when the request is removed from the link tree.

Parameters
requestbeing removed.

Definition at line 2166 of file radsniff.c.

+ Here is the caller graph for this function:

◆ _unmark_request()

static void _unmark_request ( void *  request)
static

Callback for when the request is removed from the request tree.

Parameters
requestbeing removed.

Definition at line 2156 of file radsniff.c.

+ Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 2318 of file radsniff.c.

◆ rs_build_dict_list()

static int rs_build_dict_list ( fr_dict_attr_t const **  out,
size_t  len,
char *  list 
)
static

Definition at line 2061 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_build_event_flags()

static int rs_build_event_flags ( int *  flags,
fr_table_num_sorted_t const *  map,
size_t  map_len,
char *  list 
)
static

Definition at line 2127 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_build_filter()

static int rs_build_filter ( fr_pair_list_t out,
char const *  filter 
)
static

Definition at line 2097 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_check_pcap_drop()

static int rs_check_pcap_drop ( fr_pcap_t *  in)
static

Query libpcap to see if it dropped any packets.

We need to check to see if libpcap dropped any packets and if it did, we need to stop stats output for long enough for inaccurate statistics to be cleared out.

Parameters
inpcap handle to check.
Returns
  • 0 No drops.
  • -1 We couldn't check.
  • -2 Dropped because of buffer exhaustion.
  • -3 Dropped because of NIC.

Definition at line 552 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_daemonize()

static void rs_daemonize ( char const *  pidfile)
static

Fork and kill the parent process, writing out our PID.

Parameters
pidfilethe PID file to write our PID to

Definition at line 117 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_get_pairs()

static int rs_get_pairs ( TALLOC_CTX *  ctx,
fr_pair_list_t out,
fr_pair_list_t vps,
fr_dict_attr_t const *  da[],
int  num 
)
static

Copy a subset of attributes from one list into the other.

Should be O(n) if all the attributes exist. List must be pre-sorted.

Definition at line 994 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_got_packet()

static void rs_got_packet ( fr_event_list_t el,
int  fd,
UNUSED int  flags,
void *  ctx 
)
static

Definition at line 1926 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_install_stats_processor()

static int rs_install_stats_processor ( rs_stats_t stats,
fr_event_list_t el,
fr_pcap_t *  in,
struct timeval *  now,
bool  live 
)
static

Definition at line 939 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_cleanup()

static void rs_packet_cleanup ( rs_request_t request)
static

Definition at line 1061 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_cmp()

static int8_t rs_packet_cmp ( void const *  one,
void const *  two 
)
static

Wrapper around fr_packet_cmp to strip off the outer request struct.

Definition at line 1143 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_print()

static void rs_packet_print ( rs_request_t request,
uint64_t  count,
rs_status_t  status,
fr_pcap_t *  handle,
fr_packet_t packet,
fr_pair_list_t list,
struct timeval *  elapsed,
struct timeval *  latency,
bool  response,
bool  body 
)
inlinestatic

Definition at line 529 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_packet_print_csv()

static void rs_packet_print_csv ( uint64_t  count,
rs_status_t  status,
fr_pcap_t *  handle,
fr_packet_t packet,
fr_pair_list_t list,
UNUSED struct timeval *  elapsed,
struct timeval *  latency,
UNUSED bool  response,
bool  body 
)
static

Definition at line 309 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_print_csv_header()

static void rs_packet_print_csv_header ( void  )
static

Definition at line 268 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_print_fancy()

static void rs_packet_print_fancy ( uint64_t  count,
rs_status_t  status,
fr_pcap_t *  handle,
fr_packet_t packet,
fr_pair_list_t list,
struct timeval *  elapsed,
struct timeval *  latency,
bool  response,
bool  body 
)
static

Definition at line 383 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_process()

static void rs_packet_process ( uint64_t  count,
rs_event_t event,
struct pcap_pkthdr const *  header,
uint8_t const *  data 
)
static

Definition at line 1263 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_packet_save_in_output_dir()

static void rs_packet_save_in_output_dir ( uint64_t  count,
UNUSED rs_status_t  status,
UNUSED fr_pcap_t *  handle,
fr_packet_t packet,
fr_pair_list_t list,
UNUSED struct timeval *  elapsed,
UNUSED struct timeval *  latency,
bool  response,
bool  body 
)
static

Definition at line 478 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_request_alloc()

static rs_request_t* rs_request_alloc ( TALLOC_CTX *  ctx)
static

Definition at line 1247 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_request_to_pcap()

static int rs_request_to_pcap ( rs_event_t event,
rs_request_t request,
struct pcap_pkthdr const *  header,
uint8_t const *  data 
)
inlinestatic

Definition at line 1201 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_response_to_pcap()

static int rs_response_to_pcap ( rs_event_t event,
rs_request_t request,
struct pcap_pkthdr const *  header,
uint8_t const *  data 
)
inlinestatic

Definition at line 1151 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_rtx_cmp()

static int8_t rs_rtx_cmp ( void const *  one,
void const *  two 
)
static

Compare requests using packet info and lists of attributes.

Definition at line 2039 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_signal_action()

static void rs_signal_action ( UNUSED fr_event_list_t list,
int  fd,
int UNUSED  flags,
UNUSED void *  ctx 
)
static

Read the last signal from the signal pipe.

Definition at line 2220 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_signal_self()

static void rs_signal_self ( int  sig)
static

Write the last signal to the signal pipe.

Parameters
sigraised

Definition at line 2209 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_snprint_csv()

static size_t rs_snprint_csv ( char *  out,
size_t  outlen,
char const *  in,
size_t  inlen 
)
static

Definition at line 220 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_stats_print_code_csv()

static ssize_t rs_stats_print_code_csv ( char *  out,
size_t  outlen,
rs_latency_t stats 
)
static

Definition at line 774 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_stats_print_code_fancy()

static void rs_stats_print_code_fancy ( rs_latency_t stats,
fr_radius_packet_code_t  code 
)
static

Definition at line 635 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_stats_print_csv()

static void rs_stats_print_csv ( rs_update_t this,
rs_stats_t stats,
UNUSED struct timeval *  now 
)
static

Definition at line 799 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_stats_print_csv_header()

static void rs_stats_print_csv_header ( rs_update_t this)
static

Definition at line 726 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_stats_print_fancy()

static void rs_stats_print_fancy ( rs_update_t this,
rs_stats_t stats,
struct timeval *  now 
)
static

Definition at line 679 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_stats_process()

static void rs_stats_process ( fr_event_list_t el,
fr_time_t  now_t,
void *  ctx 
)
static

Process stats for a single interval.

Definition at line 844 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_stats_process_counters()

static void rs_stats_process_counters ( rs_latency_t stats)
static

Definition at line 620 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_stats_process_latency()

static void rs_stats_process_latency ( rs_latency_t stats)
static

Update smoothed average.

Definition at line 580 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_stats_update_latency()

static void rs_stats_update_latency ( rs_latency_t stats,
struct timeval *  latency 
)
static

Update latency statistics for request/response and forwarded packets.

Definition at line 922 of file radsniff.c.

+ Here is the caller graph for this function:

◆ rs_time_print()

static void rs_time_print ( char *  out,
size_t  len,
struct timeval const *  t 
)
static

Definition at line 193 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rs_tv_add_ms()

static void rs_tv_add_ms ( struct timeval const *  start,
unsigned long  interval,
struct timeval *  result 
)
static

Definition at line 183 of file radsniff.c.

+ Here is the caller graph for this function:

◆ timeout_event()

static void timeout_event ( fr_event_list_t el,
UNUSED fr_time_t  now_t,
UNUSED void *  ctx 
)
static

Exit the event loop after a given timeout.

Definition at line 2175 of file radsniff.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ usage()

static NEVER_RETURNS void usage ( int  status)
static

Definition at line 2263 of file radsniff.c.

+ Here is the caller graph for this function:

Variable Documentation

◆ attr_packet_type

fr_dict_attr_t const* attr_packet_type
static

Definition at line 103 of file radsniff.c.

◆ cleanup

bool cleanup
static

Definition at line 60 of file radsniff.c.

◆ conf

rs_t* conf
static

Definition at line 53 of file radsniff.c.

◆ dict_freeradius

fr_dict_t const* dict_freeradius
static

Definition at line 93 of file radsniff.c.

◆ dict_radius

fr_dict_t const* dict_radius
static

Definition at line 94 of file radsniff.c.

◆ events

fr_event_list_t* events
static

Definition at line 59 of file radsniff.c.

◆ link_tree

fr_rb_tree_t* link_tree = NULL
static

Definition at line 58 of file radsniff.c.

◆ packets_count

int packets_count = 1
static

Definition at line 61 of file radsniff.c.

◆ radsniff_dict

fr_dict_autoload_t radsniff_dict
Initial value:
= {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
{ NULL }
}
static fr_dict_t const * dict_freeradius
Definition: radsniff.c:93
static fr_dict_t const * dict_radius
Definition: radsniff.c:94

Definition at line 97 of file radsniff.c.

◆ radsniff_dict_attr

fr_dict_attr_autoload_t radsniff_dict_attr
Initial value:
= {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ NULL }
}
@ FR_TYPE_UINT32
32 Bit unsigned integer.
Definition: merged_model.c:99
static fr_dict_attr_t const * attr_packet_type
Definition: radsniff.c:103

Definition at line 106 of file radsniff.c.

◆ radsniff_version

char const* radsniff_version = RADIUSD_VERSION_BUILD("radsniff")
static

Definition at line 65 of file radsniff.c.

◆ request_tree

fr_rb_tree_t* request_tree = NULL
static

Definition at line 57 of file radsniff.c.

◆ rs_events

fr_table_num_sorted_t const rs_events[]
static
Initial value:
= {
{ L("error"), RS_ERROR },
{ L("noreq"), RS_UNLINKED },
{ L("norsp"), RS_LOST },
{ L("received"), RS_NORMAL },
{ L("reused"), RS_REUSED },
{ L("rtx"), RS_RTX }
}
#define L(_str)
Helper for initialising arrays of string literals.
Definition: build.h:207
@ RS_ERROR
Definition: radsniff.h:74
@ RS_UNLINKED
Definition: radsniff.h:71
@ RS_REUSED
Definition: radsniff.h:73
@ RS_LOST
Definition: radsniff.h:75
@ RS_NORMAL
Definition: radsniff.h:70
@ RS_RTX
Definition: radsniff.h:72

Definition at line 83 of file radsniff.c.

◆ rs_events_len

size_t rs_events_len = NUM_ELEMENTS(rs_events)
static

Definition at line 91 of file radsniff.c.

◆ rs_useful_codes

int rs_useful_codes[]
static
Initial value:
= {
}
@ FR_RADIUS_CODE_ACCESS_CHALLENGE
RFC2865 - Access-Challenge.
Definition: defs.h:43
@ FR_RADIUS_CODE_ACCESS_REQUEST
RFC2865 - Access-Request.
Definition: defs.h:33
@ FR_RADIUS_CODE_DISCONNECT_REQUEST
RFC3575/RFC5176 - Disconnect-Request.
Definition: defs.h:46
@ FR_RADIUS_CODE_DISCONNECT_ACK
RFC3575/RFC5176 - Disconnect-Ack (positive)
Definition: defs.h:47
@ FR_RADIUS_CODE_STATUS_SERVER
RFC2865/RFC5997 - Status Server (request)
Definition: defs.h:44
@ FR_RADIUS_CODE_COA_REQUEST
RFC3575/RFC5176 - CoA-Request.
Definition: defs.h:49
@ FR_RADIUS_CODE_ACCESS_ACCEPT
RFC2865 - Access-Accept.
Definition: defs.h:34
@ FR_RADIUS_CODE_ACCOUNTING_RESPONSE
RFC2866 - Accounting-Response.
Definition: defs.h:37
@ FR_RADIUS_CODE_COA_NAK
RFC3575/RFC5176 - CoA-Nak (not willing to perform)
Definition: defs.h:51
@ FR_RADIUS_CODE_COA_ACK
RFC3575/RFC5176 - CoA-Ack (positive)
Definition: defs.h:50
@ FR_RADIUS_CODE_DISCONNECT_NAK
RFC3575/RFC5176 - Disconnect-Nak (not willing to perform)
Definition: defs.h:48
@ FR_RADIUS_CODE_ACCOUNTING_REQUEST
RFC2866 - Accounting-Request.
Definition: defs.h:36
@ FR_RADIUS_CODE_ACCESS_REJECT
RFC2865 - Access-Reject.
Definition: defs.h:35

Definition at line 67 of file radsniff.c.

◆ self_pipe

int self_pipe[2] = {-1, -1}
static

Signals from sig handlers.

Definition at line 63 of file radsniff.c.

◆ start_pcap

struct timeval start_pcap = {0, 0}
static

Definition at line 53 of file radsniff.c.

◆ timestr

char timestr[50]
static

Definition at line 55 of file radsniff.c.

◆ zeros

const uint8_t zeros[RADIUS_AUTH_VECTOR_LENGTH] = {}
static

Definition at line 1261 of file radsniff.c.