The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Data Structures | Macros | Enumerations | Functions | Variables
abinary.c File Reference

Routines to encode / decode Ascend's filter attributes. More...

#include <freeradius-devel/util/base16.h>
#include <freeradius-devel/util/misc.h>
#include <freeradius-devel/util/pair.h>
#include "radius.h"
+ Include dependency graph for abinary.c:

Go to the source code of this file.

Data Structures

struct  ascend_filter_t
 
union  ascend_filter_t.__unnamed178__
 
struct  ascend_generic_filter_t
 
struct  ascend_ip_filter_t
 
struct  ascend_ipv6_filter_t
 
struct  ascend_ipx_filter_t
 
struct  ascend_ipx_net_t
 

Macros

#define DONE_FLAGS
 
#define false   0
 
#define IP_DEST_ADDR_FLAG   (1 << 1)
 
#define IP_DEST_PORT_FLAG   (1 << 3)
 
#define IP_EST_FLAG   (1 << 5)
 
#define IP_PROTO_FLAG   (1 << 4)
 
#define IP_SRC_ADDR_FLAG   (1 << 0)
 
#define IP_SRC_PORT_FLAG   (1 << 2)
 
#define IPX_NODE_ADDR_LEN   6
 
#define RAD_MAX_FILTER_LEN   6
 
#define true   (! false)
 

Enumerations

enum  ascend_filter_type_t {
  ASCEND_FILTER_GENERIC = 0 ,
  ASCEND_FILTER_IP = 1 ,
  ASCEND_FILTER_IPX = 2 ,
  ASCEND_FILTER_IPV6 = 3
}
 
enum  FilterTokens {
  FILTER_IN ,
  FILTER_OUT ,
  FILTER_FORWARD ,
  FILTER_DROP ,
  FILTER_GENERIC_COMPNEQ ,
  FILTER_GENERIC_COMPEQ ,
  FILTER_MORE ,
  FILTER_IP_DST ,
  FILTER_IP_SRC ,
  FILTER_IP_PROTO ,
  FILTER_IP_DST_PORT ,
  FILTER_IP_SRC_PORT ,
  FILTER_EST ,
  FILTER_IPX_DST_IPXNET ,
  FILTER_IPX_DST_IPXNODE ,
  FILTER_IPX_DST_IPXSOCK ,
  FILTER_IPX_SRC_IPXNET ,
  FILTER_IPX_SRC_IPXNODE ,
  FILTER_IPX_SRC_IPXSOCK
}
 
enum  RadFilterComparison {
  RAD_NO_COMPARE = 0 ,
  RAD_COMPARE_LESS ,
  RAD_COMPARE_EQUAL ,
  RAD_COMPARE_GREATER ,
  RAD_COMPARE_NOT_EQUAL
}
 

Functions

static int ascend_parse_generic (int argc, char **argv, ascend_generic_filter_t *filter)
 
static int ascend_parse_ip (int argc, char **argv, ascend_ip_filter_t *filter)
 
static int ascend_parse_ipaddr (uint32_t *ipaddr, char *str)
 
static int ascend_parse_ipv6 (int argc, char **argv, ascend_ipv6_filter_t *filter)
 
static int ascend_parse_ipx (int argc, char **argv, ascend_ipx_filter_t *filter)
 
static int ascend_parse_ipx_net (int argc, char **argv, ascend_ipx_net_t *net, uint8_t *comp)
 
static int ascend_parse_port (uint16_t *port, char *compare, char *str)
 
ssize_t fr_radius_decode_abinary (fr_pair_t *vp, uint8_t const *data, size_t data_len)
 Print an Ascend binary filter attribute to a string,. More...
 
ssize_t fr_radius_encode_abinary (fr_pair_t const *vp, fr_dbuff_t *dbuff)
 Encode a string to abinary. More...
 

Variables

static fr_table_num_sorted_t const filterCompare []
 
static size_t filterCompare_len = NUM_ELEMENTS(filterCompare)
 
static fr_table_num_sorted_t const filterKeywords []
 
static size_t filterKeywords_len = NUM_ELEMENTS(filterKeywords)
 
static fr_table_num_sorted_t const filterPortType []
 
static size_t filterPortType_len = NUM_ELEMENTS(filterPortType)
 
static fr_table_num_sorted_t const filterProtoName []
 
static size_t filterProtoName_len = NUM_ELEMENTS(filterProtoName)
 
static fr_table_num_sorted_t const filterType []
 
static size_t filterType_len = NUM_ELEMENTS(filterType)
 

Detailed Description

Routines to encode / decode Ascend's filter attributes.

Definition in file abinary.c.


Data Structure Documentation

◆ ascend_filter_t

struct ascend_filter_t

Definition at line 258 of file abinary.c.

Data Fields
union ascend_filter_t __unnamed__
uint8_t direction
uint8_t fill
uint8_t forward
uint8_t type

◆ ascend_filter_t.__unnamed178__

union ascend_filter_t.__unnamed178__

Definition at line 263 of file abinary.c.

Data Fields
ascend_generic_filter_t generic
ascend_ip_filter_t ip
ascend_ipv6_filter_t ipv6
ascend_ipx_filter_t ipx

◆ ascend_generic_filter_t

struct ascend_generic_filter_t

Definition at line 226 of file abinary.c.

Data Fields
uint8_t compNeq
uint16_t len
uint8_t mask[RAD_MAX_FILTER_LEN]
uint16_t more
uint16_t offset
uint8_t value[RAD_MAX_FILTER_LEN]

◆ ascend_ip_filter_t

struct ascend_ip_filter_t

Definition at line 97 of file abinary.c.

Data Fields
uint32_t dstip
uint8_t dstmask
uint16_t dstport
uint8_t dstPortComp
uint8_t established
uint8_t proto
uint32_t srcip
uint8_t srcmask
uint16_t srcport
uint8_t srcPortComp

◆ ascend_ipv6_filter_t

struct ascend_ipv6_filter_t

Definition at line 149 of file abinary.c.

Data Fields
uint8_t dstip[16]
uint8_t dstmask
uint16_t dstport
uint8_t dstPortComp
uint8_t established
uint8_t proto
uint8_t srcip[16]
uint8_t srcmask
uint16_t srcport
uint8_t srcPortComp

◆ ascend_ipx_filter_t

struct ascend_ipx_filter_t

Definition at line 194 of file abinary.c.

+ Collaboration diagram for ascend_ipx_filter_t:
Data Fields
ascend_ipx_net_t dst
uint8_t dstSocComp
ascend_ipx_net_t src
uint8_t srcSocComp

◆ ascend_ipx_net_t

struct ascend_ipx_net_t

Definition at line 174 of file abinary.c.

Data Fields
uint32_t net
uint8_t node[IPX_NODE_ADDR_LEN]
uint16_t socket

Macro Definition Documentation

◆ DONE_FLAGS

#define DONE_FLAGS
Value:
IP_SRC_PORT_FLAG | IP_DEST_PORT_FLAG | \
IP_PROTO_FLAG | IP_EST_FLAG)
#define IP_DEST_ADDR_FLAG
Definition: abinary.c:762
#define IP_SRC_ADDR_FLAG
Definition: abinary.c:761
#define IP_EST_FLAG
Definition: abinary.c:766
#define IP_DEST_PORT_FLAG
Definition: abinary.c:764

Definition at line 768 of file abinary.c.

◆ false

#define false   0

Definition at line 56 of file abinary.c.

◆ IP_DEST_ADDR_FLAG

#define IP_DEST_ADDR_FLAG   (1 << 1)

Definition at line 762 of file abinary.c.

◆ IP_DEST_PORT_FLAG

#define IP_DEST_PORT_FLAG   (1 << 3)

Definition at line 764 of file abinary.c.

◆ IP_EST_FLAG

#define IP_EST_FLAG   (1 << 5)

Definition at line 766 of file abinary.c.

◆ IP_PROTO_FLAG

#define IP_PROTO_FLAG   (1 << 4)

Definition at line 765 of file abinary.c.

◆ IP_SRC_ADDR_FLAG

#define IP_SRC_ADDR_FLAG   (1 << 0)

Definition at line 761 of file abinary.c.

◆ IP_SRC_PORT_FLAG

#define IP_SRC_PORT_FLAG   (1 << 2)

Definition at line 763 of file abinary.c.

◆ IPX_NODE_ADDR_LEN

#define IPX_NODE_ADDR_LEN   6

Definition at line 53 of file abinary.c.

◆ RAD_MAX_FILTER_LEN

#define RAD_MAX_FILTER_LEN   6

Definition at line 47 of file abinary.c.

◆ true

#define true   (! false)

Definition at line 57 of file abinary.c.

Enumeration Type Documentation

◆ ascend_filter_type_t

Enumerator
ASCEND_FILTER_GENERIC 
ASCEND_FILTER_IP 
ASCEND_FILTER_IPX 
ASCEND_FILTER_IPV6 

Definition at line 36 of file abinary.c.

◆ FilterTokens

Enumerator
FILTER_IN 
FILTER_OUT 
FILTER_FORWARD 
FILTER_DROP 
FILTER_GENERIC_COMPNEQ 
FILTER_GENERIC_COMPEQ 
FILTER_MORE 
FILTER_IP_DST 
FILTER_IP_SRC 
FILTER_IP_PROTO 
FILTER_IP_DST_PORT 
FILTER_IP_SRC_PORT 
FILTER_EST 
FILTER_IPX_DST_IPXNET 
FILTER_IPX_DST_IPXNODE 
FILTER_IPX_DST_IPXSOCK 
FILTER_IPX_SRC_IPXNET 
FILTER_IPX_SRC_IPXNODE 
FILTER_IPX_SRC_IPXSOCK 

Definition at line 309 of file abinary.c.

◆ RadFilterComparison

Enumerator
RAD_NO_COMPARE 
RAD_COMPARE_LESS 
RAD_COMPARE_EQUAL 
RAD_COMPARE_GREATER 
RAD_COMPARE_NOT_EQUAL 

Definition at line 376 of file abinary.c.

Function Documentation

◆ ascend_parse_generic()

static int ascend_parse_generic ( int  argc,
char **  argv,
ascend_generic_filter_t filter 
)
static

Definition at line 1078 of file abinary.c.

+ Here is the caller graph for this function:

◆ ascend_parse_ip()

static int ascend_parse_ip ( int  argc,
char **  argv,
ascend_ip_filter_t filter 
)
static

Definition at line 803 of file abinary.c.

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

◆ ascend_parse_ipaddr()

static int ascend_parse_ipaddr ( uint32_t ipaddr,
char *  str 
)
static

Definition at line 624 of file abinary.c.

+ Here is the caller graph for this function:

◆ ascend_parse_ipv6()

static int ascend_parse_ipv6 ( int  argc,
char **  argv,
ascend_ipv6_filter_t filter 
)
static

Definition at line 931 of file abinary.c.

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

◆ ascend_parse_ipx()

static int ascend_parse_ipx ( int  argc,
char **  argv,
ascend_ipx_filter_t filter 
)
static

Definition at line 546 of file abinary.c.

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

◆ ascend_parse_ipx_net()

static int ascend_parse_ipx_net ( int  argc,
char **  argv,
ascend_ipx_net_t net,
uint8_t comp 
)
static

Definition at line 397 of file abinary.c.

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

◆ ascend_parse_port()

static int ascend_parse_port ( uint16_t port,
char *  compare,
char *  str 
)
static

Definition at line 730 of file abinary.c.

+ Here is the caller graph for this function:

◆ fr_radius_decode_abinary()

ssize_t fr_radius_decode_abinary ( fr_pair_t vp,
uint8_t const *  data,
size_t  data_len 
)

Print an Ascend binary filter attribute to a string,.

Grrr... Ascend makes the server do this work, instead of doing it on the NAS.

Parameters
[in,out]vpWhere the decoded string will be stored.
[in]databinary data to decodee
[in]data_lenlength of the binary data to decodee
Returns
  • 0 OK
  • <0 on error. VP is untouched.

Definition at line 1322 of file abinary.c.

+ Here is the call graph for this function:

◆ fr_radius_encode_abinary()

ssize_t fr_radius_encode_abinary ( fr_pair_t const *  vp,
fr_dbuff_t dbuff 
)

Encode a string to abinary.

This routine will call routines to parse entries from an ASCII format to a binary format recognized by the Ascend boxes.

Parameters
vpVP to encode
dbuffwhere to write the VP data
Returns
  • >0 on success == size of the data encoded
  • <=0 on failure, which is the size needed to encode the data

Definition at line 1198 of file abinary.c.

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

Variable Documentation

◆ filterCompare

fr_table_num_sorted_t const filterCompare[]
static
Initial value:
= {
{ L("<"), RAD_COMPARE_LESS },
{ L("="), RAD_COMPARE_EQUAL },
}
@ RAD_COMPARE_LESS
Definition: abinary.c:378
@ RAD_COMPARE_GREATER
Definition: abinary.c:380
@ RAD_COMPARE_NOT_EQUAL
Definition: abinary.c:381
@ RAD_COMPARE_EQUAL
Definition: abinary.c:379
#define L(_str)
Helper for initialising arrays of string literals.
Definition: build.h:207

Definition at line 384 of file abinary.c.

◆ filterCompare_len

size_t filterCompare_len = NUM_ELEMENTS(filterCompare)
static

Definition at line 390 of file abinary.c.

◆ filterKeywords

fr_table_num_sorted_t const filterKeywords[]
static
Initial value:
= {
{ L("drop"), FILTER_DROP },
{ L("dstip"), FILTER_IP_DST },
{ L("dstipxnet"), FILTER_IPX_DST_IPXNET },
{ L("dstipxnode"), FILTER_IPX_DST_IPXNODE },
{ L("dstipxsock"), FILTER_IPX_DST_IPXSOCK },
{ L("dstport"), FILTER_IP_DST_PORT },
{ L("est"), FILTER_EST },
{ L("forward"), FILTER_FORWARD },
{ L("in"), FILTER_IN },
{ L("more"), FILTER_MORE },
{ L("out"), FILTER_OUT },
{ L("srcip"), FILTER_IP_SRC },
{ L("srcipxnet"), FILTER_IPX_SRC_IPXNET },
{ L("srcipxnode"), FILTER_IPX_SRC_IPXNODE },
{ L("srcipxsock"), FILTER_IPX_SRC_IPXSOCK },
{ L("srcport"), FILTER_IP_SRC_PORT }
}
@ FILTER_GENERIC_COMPNEQ
Definition: abinary.c:314
@ FILTER_IPX_SRC_IPXNET
Definition: abinary.c:326
@ FILTER_IP_SRC_PORT
Definition: abinary.c:321
@ FILTER_IP_DST_PORT
Definition: abinary.c:320
@ FILTER_IPX_SRC_IPXSOCK
Definition: abinary.c:328
@ FILTER_OUT
Definition: abinary.c:311
@ FILTER_IPX_SRC_IPXNODE
Definition: abinary.c:327
@ FILTER_IPX_DST_IPXNODE
Definition: abinary.c:324
@ FILTER_MORE
Definition: abinary.c:316
@ FILTER_IPX_DST_IPXSOCK
Definition: abinary.c:325
@ FILTER_IP_DST
Definition: abinary.c:317
@ FILTER_GENERIC_COMPEQ
Definition: abinary.c:315
@ FILTER_EST
Definition: abinary.c:322
@ FILTER_IP_SRC
Definition: abinary.c:318
@ FILTER_DROP
Definition: abinary.c:313
@ FILTER_IN
Definition: abinary.c:310
@ FILTER_IPX_DST_IPXNET
Definition: abinary.c:323
@ FILTER_FORWARD
Definition: abinary.c:312

Definition at line 332 of file abinary.c.

◆ filterKeywords_len

size_t filterKeywords_len = NUM_ELEMENTS(filterKeywords)
static

Definition at line 352 of file abinary.c.

◆ filterPortType

fr_table_num_sorted_t const filterPortType[]
static
Initial value:
= {
{ L("cmd"), 514 },
{ L("domain"), 53 },
{ L("exec"), 512 },
{ L("finger"), 79 },
{ L("ftp"), 21 },
{ L("ftp-data"), 20 },
{ L("gopher"), 70 },
{ L("hostname"), 101 },
{ L("kerberos"), 88 },
{ L("login"), 513 },
{ L("nameserver"), 42 },
{ L("nntp"), 119 },
{ L("ntp"), 123 },
{ L("smtp"), 25 },
{ L("talk"), 517 },
{ L("telnet"), 23 },
{ L("tftp"), 69 },
{ L("www"), 80 }
}

Definition at line 279 of file abinary.c.

◆ filterPortType_len

size_t filterPortType_len = NUM_ELEMENTS(filterPortType)
static

Definition at line 299 of file abinary.c.

◆ filterProtoName

fr_table_num_sorted_t const filterProtoName[]
static
Initial value:
= {
{ L("0"), 0 },
{ L("icmp"), 1 },
{ L("ospf"), 89 },
{ L("tcp"), 6 },
{ L("udp"), 17 }
}

Definition at line 361 of file abinary.c.

◆ filterProtoName_len

size_t filterProtoName_len = NUM_ELEMENTS(filterProtoName)
static

Definition at line 368 of file abinary.c.

◆ filterType

fr_table_num_sorted_t const filterType[]
static
Initial value:
= {
{ L("generic"), ASCEND_FILTER_GENERIC},
{ L("ip"), ASCEND_FILTER_IP},
{ L("ipv6"), ASCEND_FILTER_IPV6},
{ L("ipx"), ASCEND_FILTER_IPX},
}
@ ASCEND_FILTER_IP
Definition: abinary.c:38
@ ASCEND_FILTER_GENERIC
Definition: abinary.c:37
@ ASCEND_FILTER_IPV6
Definition: abinary.c:40
@ ASCEND_FILTER_IPX
Definition: abinary.c:39

Definition at line 301 of file abinary.c.

◆ filterType_len

size_t filterType_len = NUM_ELEMENTS(filterType)
static

Definition at line 307 of file abinary.c.