TRIP Routing Daemon
TRIP (RFC 3219) Location Server Implementation
Loading...
Searching...
No Matches
protocol.c File Reference
#include "protocol.h"
#include <string.h>
#include <stdio.h>
#include <arpa/inet.h>
Include dependency graph for protocol.c:

Macros

#define CHECK_HOLD(x)
#define CHECK_AF(x)
#define CHECK_APP_PROTO(x)
#define CHECK_ITADPATH_TYPE(x)

Functions

const char * flags_str (uint8_t flags)
const char * app_proto_str (int app_proto)
 Application protocol to string.
int check_notif_error_code_subcode (uint8_t code, uint8_t subcode)
runtime_error_t new_msg_open (void *buff, size_t len, uint16_t hold, uint32_t itad, uint32_t id, const capinfo_routetype_t *capinfo_routetypes, size_t routetypes_size, capinfo_transmode_t capinfo_transmode)
 Serialize OPEN message.
runtime_error_t new_msg_update (void *buff, size_t len, const msg_update_attr_t **attrs, size_t attrs_size)
 Serialize UPDATE message.
runtime_error_t new_route (void *buff, size_t len, uint16_t af, uint16_t app_proto, const char *addr)
 Serialize route.
runtime_error_t new_attr_withdrawnroutes (void *buff, size_t len, int lsencap, uint32_t id, uint32_t seq, const void *routes, size_t routes_size)
 Serialize WithdrawnRoutes attribute routes_size is size of routes in bytes.
runtime_error_t new_attr_reachableroutes (void *buff, size_t len, int lsencap, uint32_t id, uint32_t seq, const void *routes, size_t routes_size)
 Serialize ReachableRoutes attribute routes_size is size of routes in bytes.
runtime_error_t new_attr_nexthopserver (void *buff, size_t len, uint32_t next_itad, const char *server)
 Serialize NextHopServer attribute.
runtime_error_t new_attr_advertisementpath (void *buff, size_t len, uint8_t type, const uint32_t *segs, uint16_t segs_size)
 Serialize AdvertisementPath attribute.
runtime_error_t new_attr_routedpath (void *buff, size_t len, uint8_t type, const uint32_t *segs, uint16_t segs_size)
 Serialize RoutedPath attribute.
runtime_error_t new_attr_atomicaggregate (void *buff, size_t len)
 Serialize AtomicAggregate attribute.
runtime_error_t new_attr_localpref (void *buff, size_t len, uint32_t localpref)
 Serialize LocalPref attribute.
runtime_error_t new_attr_multiexitdisc (void *buff, size_t len, uint32_t metric)
 Serialize MultiExitDisc attribute.
runtime_error_t new_attr_communities (void *buff, size_t len, const community_t *communities, size_t communities_size)
 Serialize Communities attribute.
runtime_error_t new_attr_itadtopology (void *buff, size_t len, uint32_t id, uint32_t seq, const uint32_t *itads, size_t itads_size)
 Serialize ITAD Topology attribute.
runtime_error_t new_attr_convertedroute (void *buff, size_t len)
 Serialize ConvertedRoute attribute.
runtime_error_t new_msg_keepalive (void *buff, size_t len)
 Serialize KEEPALIVE message.
runtime_error_t new_msg_notif (void *buff, size_t len, uint8_t error_code, uint8_t error_subcode, size_t datalen, const void *data)
 Serialize NOTIFICATION message.
runtime_error_t parse_msg (void *buff, size_t len, msg_t **msg_out)
 Deserialize message.
runtime_error_t parse_msg_open (void *buff, size_t len, msg_open_t **open_out)
 Deserialize message OPEN.
runtime_error_t parse_msg_open_opt (void *buff, size_t len, msg_open_opt_t **opt_out)
 Deserialize message OPEN optional parameter.
runtime_error_t parse_capinfo (void *buff, size_t len, capinfo_t **capinfo_out)
 Deserialize option capability information.
runtime_error_t parse_capinfo_routetype (void *buff, size_t len, capinfo_routetype_t **routetype_out)
 Deserialize option route type.
runtime_error_t parse_capinfo_transmode (void *buff, size_t len, capinfo_transmode_t **transmode_out)
 Deserialize option transmission mode.
runtime_error_t parse_msg_update_attr (void *buff, size_t len, msg_update_attr_t **attr_out)
 Deserialize UPDATE attribute.
runtime_error_t parse_msg_update_attr_lsencap (void *buff, size_t len, msg_update_attr_lsencap_t **attr_out)
 Deserialize UPDATE link-state encapsulated attribute.
runtime_error_t parse_route (void *buff, size_t len, route_t **route_out)
 Deserialize route.
runtime_error_t parse_attr_nexthopserver (void *buff, size_t len, attr_nexthopserver_t **nexthop_out)
 Deserialize NextHopServer attribute.
runtime_error_t parse_itadpath (void *buff, size_t len, itadpath_t **itadpath_out)
 Deserialize ITAD path.
runtime_error_t parse_attr_localpref (void *buff, size_t len, attr_localpref_t **localpref_out)
 Deserialize LocalPreference attribute.
runtime_error_t parse_attr_multiexitdisc (void *buff, size_t len, attr_multiexitdisc_t **multiexitdisc_out)
 Deserialize MultiExitDisc attribute.
runtime_error_t parse_community (void *buff, size_t len, community_t **community_out)
 Deserialize Community.
runtime_error_t parse_itad (void *buff, size_t len, uint32_t **itad_out)
 Deserialize ITAD.
runtime_error_t parse_msg_notif (void *buff, size_t len, msg_notif_t **notif_out)
 Deserialize NOTIFICATION message.
const char * notif_code_subcode_str (int code, int subcode)
 String NOTIFICATION code, subcode.

Variables

const char * msg_type_strs []
 Message type strings.
const char * open_opt_type_strs []
 Message type strings.
const char * capinfo_code_strs []
 Capability information option type strings.
const char * capinfo_transmode_strs []
 Capability information transmission mode types strings.
const char * attr_strs []
 Attribute strings.
const char * af_strs []
 Address family strings.
const char * notif_code_strs []
 NOTIFICATION error code strings.
const char * notif_subcode_msg_strs []
 NOTIFICATION error subcode for message strings.
const char * notif_subcode_open_strs []
 NOTIFICATION error subcode for OPEN strings.
const char * notif_subcode_update_strs []
 NOTIFICATION error subcode for UPDATE strings.
const char ** notif_code_subcodes_strs []
 subcode strings per code class
const char * runtime_error_strs []
 Serialization/deserialization runtime error strings.
const capinfo_routetype_t supported_routetypes []
 Supported routetypes constant.
const size_t supported_routetypes_size
 Supported routetypes constant size.

Detailed Description

Protocol serialization and deserialization implementation

Macro Definition Documentation

◆ CHECK_AF

#define CHECK_AF ( x)
Value:
((x < AF_DECIMAL) || (x > AF_CARRIER))

◆ CHECK_APP_PROTO

#define CHECK_APP_PROTO ( x)
Value:
((x < APP_PROTO_SIP) || (x > APP_PROTO_IAX2))
@ APP_PROTO_SIP
Definition protocol.h:227
@ APP_PROTO_IAX2
Definition protocol.h:231

◆ CHECK_HOLD

#define CHECK_HOLD ( x)
Value:
((x == 0) || (x < 3))

◆ CHECK_ITADPATH_TYPE

#define CHECK_ITADPATH_TYPE ( x)
Value:
((x < ITADPATH_TYPE_AP_SET) || \
(x > ITADPATH_TYPE_AP_SEQUENCE))

Variable Documentation

◆ af_strs

const char* af_strs[]
Initial value:
= {
"nil",
"decimal",
"pentadecimal",
"E.164",
"trunkgroup",
"carrier"
}

Address family strings.

◆ attr_strs

const char* attr_strs[]
Initial value:
= {
"nil",
"WithdrawnRoutes",
"ReachableRoutes",
"NextHopServer",
"AdvertisementPath",
"RoutedPath",
"AtomicAggregate",
"LocalPreference",
"MultiExitDisc",
"Communities",
"ITADTopology",
"ConvertedRoute",
"ResourcePriority",
"TotalCircuitCapacity",
"AvailableCircuits",
"CallSuccess",
"E164Prefix",
"PentaDecPrefix",
"DecimalPrefix",
"TrunkGroup",
"Carrier"
}

Attribute strings.

◆ capinfo_code_strs

const char* capinfo_code_strs[]
Initial value:
= {
"nil",
"CAPINFO_CODE_ROUTETYPE",
"CAPINFO_CODE_TRANSMODE"
}

Capability information option type strings.

◆ capinfo_transmode_strs

const char* capinfo_transmode_strs[]
Initial value:
= {
"nil",
"duplex",
"send-only",
"receive-only"
}

Capability information transmission mode types strings.

◆ msg_type_strs

const char* msg_type_strs[]
Initial value:
= {
"nil",
"OPEN",
"UPDATE",
"NOTIFICATION",
"KEEPALIVE"
}

Message type strings.

◆ notif_code_strs

const char* notif_code_strs[]
Initial value:
= {
"nil",
"message",
"OPEN",
"UPDATE",
"expired",
"state",
"cease"
}

NOTIFICATION error code strings.

◆ notif_code_subcodes_strs

const char** notif_code_subcodes_strs[]
Initial value:
= {
NULL,
NULL,
NULL,
NULL
}
const char * notif_subcode_update_strs[]
NOTIFICATION error subcode for UPDATE strings.
Definition protocol.c:154
const char * notif_subcode_open_strs[]
NOTIFICATION error subcode for OPEN strings.
Definition protocol.c:143
const char * notif_subcode_msg_strs[]
NOTIFICATION error subcode for message strings.
Definition protocol.c:137

subcode strings per code class

◆ notif_subcode_msg_strs

const char* notif_subcode_msg_strs[]
Initial value:
= {
"nil",
"bad length",
"bad type"
}

NOTIFICATION error subcode for message strings.

◆ notif_subcode_open_strs

const char* notif_subcode_open_strs[]
Initial value:
= {
"nil",
"unsupported version",
"bad ITAD",
"bad ID",
"unsupported option",
"bad hold",
"unsupported capability",
"transmission mode mismatch"
}

NOTIFICATION error subcode for OPEN strings.

◆ notif_subcode_update_strs

const char* notif_subcode_update_strs[]
Initial value:
= {
"nil",
"malformed attribute",
"unknown well-known attribute",
"missing well-known flag",
"bad attribute flag",
"bad attribute length",
"invalid attribute"
}

NOTIFICATION error subcode for UPDATE strings.

◆ open_opt_type_strs

const char* open_opt_type_strs[]
Initial value:
= {
"nil",
"OPEN_OPT_TYPE_CAPABILITY_INFO"
}

Message type strings.

◆ runtime_error_strs

const char* runtime_error_strs[]
Initial value:
= {
"no error",
"invalid buffer",
"not enough buffer",
"hold time must be 0 or at least 3 s",
"ITAD must not be 0 (reserved)",
"invalid NOTIFICATION error code",
"invalid NOTIFICATION error subcode",
"passed an incomplete message, recv more",
"invalid message type",
"unsupported protocol version",
"unsupported OPEN option param",
"unsupported capability info code",
"unsupported address family",
"unsupported application protocol",
"invalid send/recv capability",
"unsupported attribute type",
"attribute should have well-known",
"attribute must be link-state encapsulated",
"unsupported ITAD path type",
"reserved community ITAD with bad ID"
}

Serialization/deserialization runtime error strings.

◆ supported_routetypes

const capinfo_routetype_t supported_routetypes[]
Initial value:
= {
{ AF_DECIMAL, APP_PROTO_SIP },
{ AF_DECIMAL, APP_PROTO_H323_225_0_Q931 },
{ AF_DECIMAL, APP_PROTO_H323_225_0_RAS },
{ AF_DECIMAL, APP_PROTO_H323_225_0_ANNEXG },
{ AF_DECIMAL, APP_PROTO_IAX2 },
{ AF_E164, APP_PROTO_SIP },
{ AF_E164, APP_PROTO_IAX2 },
}
@ APP_PROTO_H323_225_0_RAS
Definition protocol.h:229
@ APP_PROTO_H323_225_0_ANNEXG
Definition protocol.h:230
@ APP_PROTO_H323_225_0_Q931
Definition protocol.h:228

Supported routetypes constant.

◆ supported_routetypes_size

const size_t supported_routetypes_size
Initial value:
sizeof(capinfo_routetype_t)
const capinfo_routetype_t supported_routetypes[]
Supported routetypes constant.
Definition protocol.c:218

Supported routetypes constant size.