libosmogsm 1.9.0.196-9975
Osmocom GSM library
Ipa

IPA Multiplex utility routines. More...

Macros

#define IPA_ALLOC_SIZE   1200
 
#define IPA_STRING_MAX   64
 

Functions

const char * ipa_ccm_idtag_name (uint8_t tag)
 
int ipa_ccm_idtag_parse (struct tlv_parsed *dec, unsigned char *buf, int len)
 Parse the payload part of an IPA CCM ID GET, return tlv_parsed format. More...
 
int ipa_ccm_idtag_parse_off (struct tlv_parsed *dec, unsigned char *buf, int len, const int len_offset)
 Parse the payload part of an IPA CCM ID GET, return tlv_parsed format. More...
 
int ipa_ccm_id_get_parse (struct tlv_parsed *dec, const uint8_t *buf, unsigned int len)
 Parse the payload part of an IPA CCM ID GET, return tlv_parsed format. More...
 
int ipa_ccm_id_resp_parse (struct tlv_parsed *dec, const uint8_t *buf, unsigned int len)
 Parse the payload part of an IPA CCM ID RESP, return tlv_parsed format. More...
 
int ipa_parse_unitid (const char *str, struct ipaccess_unit *unit_data)
 
int ipa_ccm_tlv_to_unitdata (struct ipaccess_unit *ud, const struct tlv_parsed *tp)
 Fill ud struct from tp structure. More...
 
struct msgbipa_ccm_make_id_resp (const struct ipaccess_unit *dev, const uint8_t *ies_req, unsigned int num_ies_req)
 Generate IPA CCM ID RESP based on list of IEs. More...
 
struct msgbipa_ccm_make_id_resp_from_req (const struct ipaccess_unit *dev, const uint8_t *data, unsigned int len)
 Generate IPA CCM ID RESP based on requets payload. More...
 
int ipa_send (int fd, const void *msg, size_t msglen)
 
int ipa_ccm_send_pong (int fd)
 
int ipa_ccm_send_id_ack (int fd)
 
int ipa_ccm_send_id_req (int fd)
 
int ipa_ccm_rcvmsg_base (struct msgb *msg, struct osmo_fd *bfd)
 
int ipa_ccm_rcvmsg_bts_base (struct msgb *msg, struct osmo_fd *bfd)
 
void ipa_prepend_header_ext (struct msgb *msg, int proto)
 
void ipa_prepend_header (struct msgb *msg, int proto)
 
struct msgbipa_msg_alloc (int headroom)
 

Variables

static const uint8_t ipa_pong_msg []
 
static const uint8_t ipa_id_ack_msg []
 
static const uint8_t ipa_id_req_msg []
 
static const char * idtag_names []
 

Detailed Description

IPA Multiplex utility routines.

Macro Definition Documentation

◆ IPA_ALLOC_SIZE

#define IPA_ALLOC_SIZE   1200

◆ IPA_STRING_MAX

#define IPA_STRING_MAX   64

Function Documentation

◆ ipa_ccm_id_get_parse()

int ipa_ccm_id_get_parse ( struct tlv_parsed dec,
const uint8_t *  buf,
unsigned int  len 
)

Parse the payload part of an IPA CCM ID GET, return tlv_parsed format.

The odd payload format of those messages is structured as follows:

  • 8bit length value (length of payload and tag)
  • 8bit tag value
  • optional, variable-length payload
    Parameters
    [out]decCaller-provided/allocated output structure for parsed payload
    [in]bufBuffer containing the payload (excluding 1 byte msg_type) of the message
    [in]lenLength of buf in octets
    Returns
    0 on success; negative on error

References DLMI, ipa_ccm_idtag_name(), len, tlv_p_entry::len, LOGL_DEBUG, LOGL_ERROR, LOGP, LOGPC, tlv_parsed::lv, and tlv_p_entry::val.

◆ ipa_ccm_id_resp_parse()

int ipa_ccm_id_resp_parse ( struct tlv_parsed dec,
const uint8_t *  buf,
unsigned int  len 
)

Parse the payload part of an IPA CCM ID RESP, return tlv_parsed format.

The odd payload format of those messages is structured as follows:

  • 16bit length value (length of payload and tag)
  • 8bit tag value
  • optional, variable-length payload
    Parameters
    [out]decCaller-provided/allocated output structure for parsed payload
    [in]bufBuffer containing the payload (excluding 1 byte msg_type) of the message
    [in]lenLength of buf in octets
    Returns
    0 on success; negative on error

References DEBUGPC, DLMI, ipa_ccm_idtag_name(), len, tlv_p_entry::len, LOGL_DEBUG, LOGL_ERROR, LOGP, LOGPC, tlv_parsed::lv, and tlv_p_entry::val.

◆ ipa_ccm_idtag_name()

const char * ipa_ccm_idtag_name ( uint8_t  tag)

◆ ipa_ccm_idtag_parse()

int ipa_ccm_idtag_parse ( struct tlv_parsed dec,
unsigned char *  buf,
int  len 
)

Parse the payload part of an IPA CCM ID GET, return tlv_parsed format.

References ipa_ccm_idtag_parse_off(), and len.

◆ ipa_ccm_idtag_parse_off()

int ipa_ccm_idtag_parse_off ( struct tlv_parsed dec,
unsigned char *  buf,
int  len,
const int  len_offset 
)

Parse the payload part of an IPA CCM ID GET, return tlv_parsed format.

WARNING: This function can only parse correctly IPA CCM ID GET/REQUEST messages, and only when len_offset is passed value of 1.

Parameters
[out]decCaller-provided/allocated output structure for parsed payload
[in]bufBuffer containing the payload (excluding 1 byte msg_type) of the message
[in]lenLength of buf in octets
[in]len_offsetOffset from end of len field to start of value (ommiting tag). Must be 1!
Returns
0 on success; negative on error

References DLMI, ipa_ccm_idtag_name(), len, tlv_p_entry::len, LOGL_DEBUG, LOGL_ERROR, LOGP, LOGPC, tlv_parsed::lv, and tlv_p_entry::val.

Referenced by ipa_ccm_idtag_parse().

◆ ipa_ccm_make_id_resp()

struct msgb * ipa_ccm_make_id_resp ( const struct ipaccess_unit dev,
const uint8_t *  ies_req,
unsigned int  num_ies_req 
)

◆ ipa_ccm_make_id_resp_from_req()

struct msgb * ipa_ccm_make_id_resp_from_req ( const struct ipaccess_unit dev,
const uint8_t *  data,
unsigned int  len 
)

Generate IPA CCM ID RESP based on requets payload.

Parameters
[in]devDescriptor describing identity data for response
[in]dataPayload of the IPA CCM ID GET request
[in]lenLength of data in octets
Returns
Message buffer with IPA CCM ID RESP

References data, DLINP, ipa_ccm_make_id_resp(), len, LOGL_ERROR, and LOGP.

◆ ipa_ccm_rcvmsg_base()

int ipa_ccm_rcvmsg_base ( struct msgb msg,
struct osmo_fd bfd 
)

◆ ipa_ccm_rcvmsg_bts_base()

int ipa_ccm_rcvmsg_bts_base ( struct msgb msg,
struct osmo_fd bfd 
)

◆ ipa_ccm_send_id_ack()

int ipa_ccm_send_id_ack ( int  fd)

References fd, ipa_id_ack_msg, and ipa_send().

Referenced by ipa_ccm_rcvmsg_base().

◆ ipa_ccm_send_id_req()

int ipa_ccm_send_id_req ( int  fd)

References fd, ipa_id_req_msg, and ipa_send().

◆ ipa_ccm_send_pong()

int ipa_ccm_send_pong ( int  fd)

◆ ipa_ccm_tlv_to_unitdata()

int ipa_ccm_tlv_to_unitdata ( struct ipaccess_unit ud,
const struct tlv_parsed tp 
)

Fill ud struct from tp structure.

Parameters
[in,out]udipaccess_unit to fill
[in]tpthe decoded TLV structure from eg. ID_RESP message
Returns
zero on success, negative on error

This function expects parameter ud's fields to be initialized to zero if not yet set. Existing incoming string pointer fields are expected to be allocated using talloc and will be deallocated as such if replaced with the content of tp.

References ipaccess_unit::equipvers, ipa_parse_unitid(), IPAC_IDTAG_EQUIPVERS, IPAC_IDTAG_LOCATION1, IPAC_IDTAG_LOCATION2, IPAC_IDTAG_MACADDR, IPAC_IDTAG_SERNR, IPAC_IDTAG_SWVERSION, IPAC_IDTAG_UNIT, IPAC_IDTAG_UNITNAME, ipaccess_unit::location1, ipaccess_unit::location2, ipaccess_unit::mac_addr, osmo_macaddr_parse(), osmo_talloc_replace_string(), ipaccess_unit::serno, ipaccess_unit::swversion, TLVP_PRES_LEN, TLVP_VAL, and ipaccess_unit::unit_name.

◆ ipa_msg_alloc()

struct msgb * ipa_msg_alloc ( int  headroom)

References msgb_alloc_headroom().

Referenced by ipa_ccm_make_id_resp().

◆ ipa_parse_unitid()

int ipa_parse_unitid ( const char *  str,
struct ipaccess_unit unit_data 
)

◆ ipa_prepend_header()

void ipa_prepend_header ( struct msgb msg,
int  proto 
)

◆ ipa_prepend_header_ext()

void ipa_prepend_header_ext ( struct msgb msg,
int  proto 
)

◆ ipa_send()

int ipa_send ( int  fd,
const void *  msg,
size_t  msglen 
)

Variable Documentation

◆ idtag_names

const char* idtag_names[]
static
Initial value:
= {
[IPAC_IDTAG_SERNR] = "Serial_Number",
[IPAC_IDTAG_UNITNAME] = "Unit_Name",
[IPAC_IDTAG_LOCATION1] = "Location_1",
[IPAC_IDTAG_LOCATION2] = "Location_2",
[IPAC_IDTAG_EQUIPVERS] = "Equipment_Version",
[IPAC_IDTAG_SWVERSION] = "Software_Version",
[IPAC_IDTAG_IPADDR] = "IP_Address",
[IPAC_IDTAG_MACADDR] = "MAC_Address",
[IPAC_IDTAG_UNIT] = "Unit_ID",
}
@ IPAC_IDTAG_EQUIPVERS
Definition: ipaccess.h:66
@ IPAC_IDTAG_MACADDR
Definition: ipaccess.h:69
@ IPAC_IDTAG_UNIT
Definition: ipaccess.h:70
@ IPAC_IDTAG_UNITNAME
Definition: ipaccess.h:63
@ IPAC_IDTAG_SWVERSION
Definition: ipaccess.h:67
@ IPAC_IDTAG_LOCATION2
Definition: ipaccess.h:65
@ IPAC_IDTAG_LOCATION1
Definition: ipaccess.h:64
@ IPAC_IDTAG_SERNR
Definition: ipaccess.h:62
@ IPAC_IDTAG_IPADDR
Definition: ipaccess.h:68

Referenced by ipa_ccm_idtag_name().

◆ ipa_id_ack_msg

const uint8_t ipa_id_ack_msg[]
static
Initial value:
= {
}
@ IPAC_MSGT_ID_ACK
Definition: ipaccess.h:50
@ IPAC_PROTO_IPACCESS
Definition: ipaccess.h:23

Referenced by ipa_ccm_send_id_ack().

◆ ipa_id_req_msg

const uint8_t ipa_id_req_msg[]
static
Initial value:

Referenced by ipa_ccm_send_id_req().

◆ ipa_pong_msg

const uint8_t ipa_pong_msg[]
static
Initial value:
= {
}
@ IPAC_MSGT_PONG
Definition: ipaccess.h:47

Referenced by ipa_ccm_send_pong().