lldp: move TLV related functions to lldp-tlv.c
Move some public functions from lldp-internal.c to lldp-tlv.c, as now they are not internal functions anymore.
This commit is contained in:
@@ -29,207 +29,6 @@
|
||||
/* Maximum Ports can be attached to any chassis */
|
||||
#define LLDP_MIB_MAX_PORT_PER_CHASSIS 32
|
||||
|
||||
int sd_lldp_packet_read_chassis_id(tlv_packet *tlv,
|
||||
uint8_t *type,
|
||||
uint8_t **data,
|
||||
uint16_t *length) {
|
||||
uint8_t subtype;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_CHASSIS_ID);
|
||||
if (r < 0)
|
||||
goto out2;
|
||||
|
||||
r = tlv_packet_read_u8(tlv, &subtype);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
switch (subtype) {
|
||||
case LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:
|
||||
|
||||
r = tlv_packet_read_bytes(tlv, data, length);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
break;
|
||||
default:
|
||||
r = -EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
|
||||
*type = subtype;
|
||||
|
||||
out1:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
out2:
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_port_id(tlv_packet *tlv,
|
||||
uint8_t *type,
|
||||
uint8_t **data,
|
||||
uint16_t *length) {
|
||||
uint8_t subtype;
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_PORT_ID);
|
||||
if (r < 0)
|
||||
goto out2;
|
||||
|
||||
r = tlv_packet_read_u8(tlv, &subtype);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
switch (subtype) {
|
||||
case LLDP_PORT_SUBTYPE_PORT_COMPONENT:
|
||||
case LLDP_PORT_SUBTYPE_INTERFACE_ALIAS:
|
||||
case LLDP_PORT_SUBTYPE_INTERFACE_NAME:
|
||||
case LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
*data = (uint8_t *) s;
|
||||
|
||||
break;
|
||||
case LLDP_PORT_SUBTYPE_MAC_ADDRESS:
|
||||
|
||||
r = tlv_packet_read_bytes(tlv, data, length);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
break;
|
||||
default:
|
||||
r = -EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
|
||||
*type = subtype;
|
||||
|
||||
out1:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
out2:
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_ttl(tlv_packet *tlv, uint16_t *ttl) {
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_TTL);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
r = tlv_packet_read_u16(tlv, ttl);
|
||||
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
out:
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_system_name(tlv_packet *tlv,
|
||||
char **data,
|
||||
uint16_t *length) {
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_SYSTEM_NAME);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
*data = (char *) s;
|
||||
|
||||
out:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_system_description(tlv_packet *tlv,
|
||||
char **data,
|
||||
uint16_t *length) {
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_SYSTEM_DESCRIPTION);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
*data = (char *) s;
|
||||
|
||||
out:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_port_description(tlv_packet *tlv,
|
||||
char **data,
|
||||
uint16_t *length) {
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_PORT_DESCRIPTION);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
*data = (char *) s;
|
||||
|
||||
out:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_system_capability(tlv_packet *tlv, uint16_t *data) {
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_SYSTEM_CAPABILITIES);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_u16(tlv, data);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/* 10.5.5.2.2 mibUpdateObjects ()
|
||||
* The mibUpdateObjects () procedure updates the MIB objects corresponding to
|
||||
* the TLVs contained in the received LLDPDU for the LLDP remote system
|
||||
|
||||
@@ -338,3 +338,204 @@ int lldp_tlv_packet_exit_container(tlv_packet *m) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_chassis_id(tlv_packet *tlv,
|
||||
uint8_t *type,
|
||||
uint8_t **data,
|
||||
uint16_t *length) {
|
||||
uint8_t subtype;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_CHASSIS_ID);
|
||||
if (r < 0)
|
||||
goto out2;
|
||||
|
||||
r = tlv_packet_read_u8(tlv, &subtype);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
switch (subtype) {
|
||||
case LLDP_CHASSIS_SUBTYPE_MAC_ADDRESS:
|
||||
|
||||
r = tlv_packet_read_bytes(tlv, data, length);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
break;
|
||||
default:
|
||||
r = -EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
|
||||
*type = subtype;
|
||||
|
||||
out1:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
out2:
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_port_id(tlv_packet *tlv,
|
||||
uint8_t *type,
|
||||
uint8_t **data,
|
||||
uint16_t *length) {
|
||||
uint8_t subtype;
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_PORT_ID);
|
||||
if (r < 0)
|
||||
goto out2;
|
||||
|
||||
r = tlv_packet_read_u8(tlv, &subtype);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
switch (subtype) {
|
||||
case LLDP_PORT_SUBTYPE_PORT_COMPONENT:
|
||||
case LLDP_PORT_SUBTYPE_INTERFACE_ALIAS:
|
||||
case LLDP_PORT_SUBTYPE_INTERFACE_NAME:
|
||||
case LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED:
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
*data = (uint8_t *) s;
|
||||
|
||||
break;
|
||||
case LLDP_PORT_SUBTYPE_MAC_ADDRESS:
|
||||
|
||||
r = tlv_packet_read_bytes(tlv, data, length);
|
||||
if (r < 0)
|
||||
goto out1;
|
||||
|
||||
break;
|
||||
default:
|
||||
r = -EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
|
||||
*type = subtype;
|
||||
|
||||
out1:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
out2:
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_ttl(tlv_packet *tlv, uint16_t *ttl) {
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_TTL);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
r = tlv_packet_read_u16(tlv, ttl);
|
||||
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
out:
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_system_name(tlv_packet *tlv,
|
||||
char **data,
|
||||
uint16_t *length) {
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_SYSTEM_NAME);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
*data = (char *) s;
|
||||
|
||||
out:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_system_description(tlv_packet *tlv,
|
||||
char **data,
|
||||
uint16_t *length) {
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_SYSTEM_DESCRIPTION);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
*data = (char *) s;
|
||||
|
||||
out:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_port_description(tlv_packet *tlv,
|
||||
char **data,
|
||||
uint16_t *length) {
|
||||
char *s;
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_PORT_DESCRIPTION);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_string(tlv, &s, length);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
*data = (char *) s;
|
||||
|
||||
out:
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int sd_lldp_packet_read_system_capability(tlv_packet *tlv, uint16_t *data) {
|
||||
int r;
|
||||
|
||||
assert_return(tlv, -EINVAL);
|
||||
|
||||
r = lldp_tlv_packet_enter_container(tlv, LLDP_TYPE_SYSTEM_CAPABILITIES);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = tlv_packet_read_u16(tlv, data);
|
||||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
|
||||
(void) lldp_tlv_packet_exit_container(tlv);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user