diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2015-09-24 23:08:22 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2015-10-02 17:39:22 +0200 |
commit | 0037c2dc54ca5bc5a3ec428619ff136066467565 (patch) | |
tree | b285ff69d6dec75d3e9ebe18b4dee35f119a3286 /src/libsystemd-network/lldp-internal.c | |
parent | 564cabd46c7c1532ad4d562bf8332eaed49ac201 (diff) |
lldp: move lldp_receive_packet() to lldp-internal.c
In order to implement tests for the LLDP state machine, we need to
mock lldp_network_bind_raw_socket(). Move the other function
lldp_receive_packet() to another file so that we can replace the first
function with a custom one and keep the second one.
Diffstat (limited to 'src/libsystemd-network/lldp-internal.c')
-rw-r--r-- | src/libsystemd-network/lldp-internal.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libsystemd-network/lldp-internal.c b/src/libsystemd-network/lldp-internal.c index 951f7193f4..4012cd483b 100644 --- a/src/libsystemd-network/lldp-internal.c +++ b/src/libsystemd-network/lldp-internal.c @@ -331,3 +331,30 @@ int lldp_chassis_new(tlv_packet *tlv, return 0; } + +int lldp_receive_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) { + _cleanup_lldp_packet_unref_ tlv_packet *packet = NULL; + tlv_packet *p; + uint16_t length; + int r; + + assert(fd); + assert(userdata); + + r = tlv_packet_new(&packet); + if (r < 0) + return r; + + length = read(fd, &packet->pdu, sizeof(packet->pdu)); + + /* Silently drop the packet */ + if ((size_t) length > ETHER_MAX_LEN) + return 0; + + packet->userdata = userdata; + + p = packet; + packet = NULL; + + return lldp_handle_packet(p, (uint16_t) length); +} |