1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-16 03:24:49 +03:00

sd-lldp: drop state field

There's really no point in maintaining a state, the state machine is trivial,
and we actually never look at the state anyway, we just keep updating it.
This commit is contained in:
Lennart Poettering 2016-02-16 18:56:37 +01:00
parent 714c62b463
commit c7d264ff98

View File

@ -33,18 +33,6 @@
#include "siphash24.h"
#include "string-util.h"
typedef enum LLDPAgentRXState {
LLDP_AGENT_RX_WAIT_PORT_OPERATIONAL = 4,
LLDP_AGENT_RX_DELETE_AGED_INFO,
LLDP_AGENT_RX_LLDP_INITIALIZE,
LLDP_AGENT_RX_WAIT_FOR_FRAME,
LLDP_AGENT_RX_RX_FRAME,
LLDP_AGENT_RX_DELETE_INFO,
LLDP_AGENT_RX_UPDATE_INFO,
_LLDP_AGENT_RX_STATE_MAX,
_LLDP_AGENT_RX_INVALID = -1,
} LLDPAgentRXState;
/* Section 10.5.2.2 Reception counters */
struct lldp_agent_statistics {
uint64_t stats_ageouts_total;
@ -65,7 +53,6 @@ struct sd_lldp {
void *userdata;
LLDPAgentRXState rx_state;
lldp_agent_statistics statistics;
};
@ -103,8 +90,6 @@ static const struct hash_ops chassis_id_hash_ops = {
};
static void lldp_mib_delete_objects(sd_lldp *lldp);
static void lldp_set_state(sd_lldp *lldp, LLDPAgentRXState state);
static void lldp_run_state_machine(sd_lldp *ll);
static int lldp_receive_frame(sd_lldp *lldp, tlv_packet *tlv) {
int r;
@ -113,18 +98,15 @@ static int lldp_receive_frame(sd_lldp *lldp, tlv_packet *tlv) {
assert(tlv);
/* Remove expired packets */
if (prioq_size(lldp->by_expiry) > 0) {
lldp_set_state(lldp, LLDP_AGENT_RX_DELETE_INFO);
if (prioq_size(lldp->by_expiry) > 0)
lldp_mib_delete_objects(lldp);
}
r = lldp_mib_add_objects(lldp->by_expiry, lldp->neighbour_mib, tlv);
if (r < 0)
goto out;
lldp_set_state(lldp, LLDP_AGENT_RX_UPDATE_INFO);
if (lldp->cb)
lldp->cb(lldp, SD_LLDP_EVENT_UPDATE_INFO, lldp->userdata);
log_lldp("Packet added. MIB size: %d , PQ size: %d",
hashmap_size(lldp->neighbour_mib),
@ -136,8 +118,6 @@ static int lldp_receive_frame(sd_lldp *lldp, tlv_packet *tlv) {
if (r < 0)
log_lldp("Receive frame failed: %s", strerror(-r));
lldp_set_state(lldp, LLDP_AGENT_RX_WAIT_FOR_FRAME);
return 0;
}
@ -162,8 +142,6 @@ int lldp_handle_packet(tlv_packet *tlv, uint16_t length) {
goto out;
}
lldp_set_state(lldp, LLDP_AGENT_RX_RX_FRAME);
p = tlv->pdu;
p += sizeof(struct ether_header);
@ -350,8 +328,6 @@ int lldp_handle_packet(tlv_packet *tlv, uint16_t length) {
return lldp_receive_frame(lldp, tlv);
out:
lldp_set_state(lldp, LLDP_AGENT_RX_WAIT_FOR_FRAME);
if (malformed) {
lldp->statistics.stats_frames_discarded_total ++;
lldp->statistics.stats_frames_in_errors_total ++;
@ -374,29 +350,6 @@ static int ttl_expiry_item_prioq_compare_func(const void *a, const void *b) {
return 0;
}
static void lldp_set_state(sd_lldp *lldp, LLDPAgentRXState state) {
assert(lldp);
assert(state < _LLDP_AGENT_RX_STATE_MAX);
lldp->rx_state = state;
lldp_run_state_machine(lldp);
}
static void lldp_run_state_machine(sd_lldp *lldp) {
if (!lldp->cb)
return;
switch (lldp->rx_state) {
case LLDP_AGENT_RX_UPDATE_INFO:
lldp->cb(lldp, SD_LLDP_EVENT_UPDATE_INFO, lldp->userdata);
break;
default:
break;
}
}
/* 10.5.5.2.1 mibDeleteObjects ()
* The mibDeleteObjects () procedure deletes all information in the LLDP remote
* systems MIB associated with the MSAP identifier if an LLDPDU is received with
@ -597,21 +550,15 @@ int sd_lldp_start(sd_lldp *lldp) {
lldp->port->status = LLDP_PORT_STATUS_ENABLED;
lldp_set_state(lldp, LLDP_AGENT_RX_LLDP_INITIALIZE);
r = lldp_port_start(lldp->port);
if (r < 0) {
log_lldp("Failed to start Port : %s , %s",
lldp->port->ifname,
strerror(-r));
lldp_set_state(lldp, LLDP_AGENT_RX_WAIT_PORT_OPERATIONAL);
return r;
}
lldp_set_state(lldp, LLDP_AGENT_RX_WAIT_FOR_FRAME);
return 0;
}
@ -715,8 +662,6 @@ int sd_lldp_new(int ifindex,
if (r < 0)
return r;
lldp->rx_state = LLDP_AGENT_RX_WAIT_PORT_OPERATIONAL;
*ret = lldp;
lldp = NULL;