This was from a sequence of early attempts to work towards a new application layer. I can give more reasoning behind it, but the bottom line is that it's currently dead weight.
OK to remove this code again? martijn@ Index: snmpd.h =================================================================== RCS file: /cvs/src/usr.sbin/snmpd/snmpd.h,v retrieving revision 1.102 diff -u -p -r1.102 snmpd.h --- snmpd.h 19 Jan 2022 10:25:04 -0000 1.102 +++ snmpd.h 20 Jan 2022 13:38:28 -0000 @@ -403,8 +403,6 @@ struct snmp_message { u_int8_t sm_data[READ_BUF_SIZE]; size_t sm_datalen; - uint32_t sm_transactionid; - u_int sm_version; /* V1, V2c */ @@ -441,11 +439,7 @@ struct snmp_message { struct ber_element *sm_varbind; struct ber_element *sm_varbindresp; - - RB_ENTRY(snmp_message) sm_entry; }; -RB_HEAD(snmp_messages, snmp_message); -extern struct snmp_messages snmp_messages; /* Defined in SNMPv2-MIB.txt (RFC 3418) */ struct snmp_stats { @@ -644,8 +638,6 @@ void snmpe(struct privsep *, struct pr void snmpe_shutdown(void); void snmpe_dispatchmsg(struct snmp_message *); void snmpe_response(struct snmp_message *); -int snmp_messagecmp(struct snmp_message *, struct snmp_message *); -RB_PROTOTYPE(snmp_messages, snmp_message, sm_entry, snmp_messagecmp) /* trap.c */ void trap_init(void); Index: snmpe.c =================================================================== RCS file: /cvs/src/usr.sbin/snmpd/snmpe.c,v retrieving revision 1.82 diff -u -p -r1.82 snmpe.c --- snmpe.c 19 Jan 2022 11:00:56 -0000 1.82 +++ snmpe.c 20 Jan 2022 13:38:28 -0000 @@ -58,8 +58,6 @@ int snmpe_encode(struct snmp_message *) struct imsgev *iev_parent; static const struct timeval snmpe_tcp_timeout = { 10, 0 }; /* 10s */ -struct snmp_messages snmp_messages = RB_INITIALIZER(&snmp_messages); - static struct privsep_proc procs[] = { { "parent", PROC_PARENT } }; @@ -246,11 +244,6 @@ snmpe_parse(struct snmp_message *msg) msg->sm_errstr = "invalid message"; - do { - msg->sm_transactionid = arc4random(); - } while (msg->sm_transactionid == 0 || - RB_INSERT(snmp_messages, &snmp_messages, msg) != NULL); - if (ober_scanf_elements(root, "{ie", &ver, &a) != 0) goto parsefail; @@ -910,8 +903,6 @@ snmpe_response(struct snmp_message *msg) void snmp_msgfree(struct snmp_message *msg) { - if (msg->sm_transactionid != 0) - RB_REMOVE(snmp_messages, &snmp_messages, msg); event_del(&msg->sm_sockev); ober_free(&msg->sm_ber); if (msg->sm_req != NULL) @@ -974,12 +965,3 @@ snmpe_encode(struct snmp_message *msg) #endif return 0; } - -int -snmp_messagecmp(struct snmp_message *m1, struct snmp_message *m2) -{ - return (m1->sm_transactionid < m2->sm_transactionid ? -1 : - m1->sm_transactionid > m2->sm_transactionid); -} - -RB_GENERATE(snmp_messages, snmp_message, sm_entry, snmp_messagecmp)