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 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 * 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_attr_withdrawnroutes (void *buff, size_t len, int lsencap, uint32_t id, uint32_t seq, const route_t **routes, size_t routes_size)
 Serialize WithdrawnRoutes attribute.
runtime_error_t new_attr_reachableroutes (void *buff, size_t len, int lsencap, uint32_t id, uint32_t seq, const route_t **routes, size_t routes_size)
 Serialize ReachableRoutes attribute.
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, const itadpath_t *path)
 Serialize AdvertisementPath attribute.
runtime_error_t new_attr_routedpath (void *buff, size_t len, const itadpath_t *path)
 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 (const void *buff, size_t len, const msg_t **msg_out)
 Deserialize message.
runtime_error_t parse_msg_open (const void *buff, size_t len, const msg_open_t **open_out)
 Deserialize message OPEN.
runtime_error_t parse_msg_open_opt (const void *buff, size_t len, const msg_open_opt_t **opt_out)
 Deserialize message OPEN optional parameter.
runtime_error_t parse_capinfo (const void *buff, size_t len, const capinfo_t **capinfo_out)
 Deserialize option capability information.
runtime_error_t parse_capinfo_routetype (const void *buff, size_t len, const capinfo_routetype_t **routetype_out)
 Deserialize option route type.
runtime_error_t parse_capinfo_transmode (const void *buff, size_t len, const capinfo_transmode_t **transmode_out)
 Deserialize option transmission mode.
runtime_error_t parse_msg_update_attr (const void *buff, size_t len, const msg_update_attr_t **attr_out)
 Deserialize UPDATE attribute.
runtime_error_t parse_msg_update_attr_lsencap (const void *buff, size_t len, const msg_update_attr_lsencap_t **attr_out)
 Deserialize UPDATE link-state encapsulated attribute.
runtime_error_t parse_route (const void *buff, size_t len, const route_t **route_out)
 Deserialize route.
runtime_error_t parse_itadpath (const void *buff, size_t len, const itadpath_t **itadpath_out)
 Deserialize ITAD path.
runtime_error_t parse_attr_localpref (const void *buff, size_t len, const attr_localpref_t **localpref_out)
 Deserialize LocalPreference attribute.
runtime_error_t parse_attr_multiexitdisc (const void *buff, size_t len, const attr_multiexitdisc_t **multiexitdisc_out)
 Deserialize MultiExitDisc attribute.
runtime_error_t parse_community (const void *buff, size_t len, const community_t **community_out)
 Deserialize Community.
runtime_error_t parse_itad (const void *buff, size_t len, const uint32_t **itad_out)
 Deserialize ITAD.
runtime_error_t parse_msg_notif (const void *buff, size_t len, const 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 * 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) \
@ APP_PROTO_H323_225_0_ANNEXG
Definition protocol.h:222
@ APP_PROTO_SIP
Definition protocol.h:219
@ APP_PROTO_IAX2
Definition protocol.h:224

◆ 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.

◆ 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,
}
const char * notif_subcode_update_strs[]
NOTIFICATION error subcode for UPDATE strings.
Definition protocol.c:102
const char * notif_subcode_open_strs[]
NOTIFICATION error subcode for OPEN strings.
Definition protocol.c:91
const char * notif_subcode_msg_strs[]
NOTIFICATION error subcode for message strings.
Definition protocol.c:85

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:221
@ APP_PROTO_H323_225_0_Q931
Definition protocol.h:220

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:164

Supported routetypes constant size.