1 /* 2 * Smux module authored by Rohit Dube. 3 * Rewritten by Nick Amato <naamato@merit.net>. 4 */ 5 6 #ifndef NETSNMP_TRANSPORT_IPV4BASE_DOMAIN 7 config_error(smux/smux depends on the IPv4Base transport domain) 8 #endif 9 10 config_belongs_in(agent_module) 11 12 #define SMUXPORT 199 13 14 #define SMUXMAXPKTSIZE 1500 15 #define SMUXMAXSTRLEN 1024 16 #define SMUXMAXPEERS 10 17 18 #define SMUX_OPEN (ASN_APPLICATION | ASN_CONSTRUCTOR | 0) 19 #define SMUX_CLOSE (ASN_APPLICATION | ASN_PRIMITIVE | 1) 20 #define SMUX_RREQ (ASN_APPLICATION | ASN_CONSTRUCTOR | 2) 21 #define SMUX_RRSP (ASN_APPLICATION | ASN_PRIMITIVE | 3) 22 #define SMUX_SOUT (ASN_APPLICATION | ASN_PRIMITIVE | 4) 23 24 #define SMUX_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0) 25 #define SMUX_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 1) 26 #define SMUX_GETRSP (ASN_CONTEXT | ASN_CONSTRUCTOR | 2) 27 #define SMUX_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 3) 28 #define SMUX_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 4) 29 30 #define SMUXC_GOINGDOWN 0 31 #define SMUXC_UNSUPPORTEDVERSION 1 32 #define SMUXC_PACKETFORMAT 2 33 #define SMUXC_PROTOCOLERROR 3 34 #define SMUXC_INTERNALERROR 4 35 #define SMUXC_AUTHENTICATIONFAILURE 5 36 37 #define SMUX_MAX_PEERS 10 38 #define SMUX_MAX_PRIORITY 2147483647 39 40 #define SMUX_REGOP_DELETE 0 41 #define SMUX_REGOP_REGISTER_RO 1 42 #define SMUX_REGOP_REGISTER_RW 2 43 44 /* 45 * Authorized peers read from the config file 46 */ 47 typedef struct _smux_peer_auth { 48 oid sa_oid[MAX_OID_LEN]; /* name of peer */ 49 size_t sa_oid_len; /* length of peer name */ 50 char sa_passwd[SMUXMAXSTRLEN]; /* configured passwd */ 51 int sa_active_fd; /* the peer using this auth */ 52 } smux_peer_auth; 53 54 /* 55 * Registrations 56 */ 57 typedef struct _smux_reg { 58 oid sr_name[MAX_OID_LEN]; /* name of subtree */ 59 size_t sr_name_len; /* length of subtree name */ 60 int sr_priority; /* priority of registration */ 61 int sr_fd; /* descriptor of owner */ 62 struct _smux_reg *sr_next; /* next one */ 63 netsnmp_handler_registration *reginfo; 64 } smux_reg; 65 66 extern void init_smux(void); 67 extern void real_init_smux(void); 68 extern int smux_accept(int); 69 extern u_char *smux_snmp_process(int, oid *, size_t *, size_t *, u_char *, 70 int); 71 extern int smux_process(int); 72 extern void smux_parse_peer_auth(const char *, char *); 73 extern void smux_free_peer_auth(void); 74 75 /* Add socket-fd to list */ 76 int smux_snmp_select_list_add(int sd); 77 78 /* Remove socket-fd from list */ 79 int smux_snmp_select_list_del(int sd); 80 81 /* Returns the count of added socket-fd's in the list */ 82 int smux_snmp_select_list_get_length(void); 83 84 /* Returns the socket-fd number from the position of the list */ 85 int smux_snmp_select_list_get_SD_from_List(int pos); 86 87