Annotation of embedaddon/quagga/lib/smux.h, revision 1.1.1.1

1.1       misho       1: /* SNMP support
                      2:  * Copyright (C) 1999 Kunihiro Ishiguro <kunihiro@zebra.org>
                      3:  *
                      4:  * This file is part of GNU Zebra.
                      5:  *
                      6:  * GNU Zebra is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2, or (at your option) any
                      9:  * later version.
                     10:  *
                     11:  * GNU Zebra is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
                     18:  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
                     19:  * 02111-1307, USA.  
                     20:  */
                     21: 
                     22: #ifndef _ZEBRA_SNMP_H
                     23: #define _ZEBRA_SNMP_H
                     24: 
                     25: #define SMUX_PORT_DEFAULT 199
                     26: 
                     27: #define SMUXMAXPKTSIZE    1500
                     28: #define SMUXMAXSTRLEN      256
                     29: 
                     30: #define SMUX_OPEN       (ASN_APPLICATION | ASN_CONSTRUCTOR | 0)
                     31: #define SMUX_CLOSE      (ASN_APPLICATION | ASN_PRIMITIVE | 1)
                     32: #define SMUX_RREQ       (ASN_APPLICATION | ASN_CONSTRUCTOR | 2)
                     33: #define SMUX_RRSP       (ASN_APPLICATION | ASN_PRIMITIVE | 3)
                     34: #define SMUX_SOUT       (ASN_APPLICATION | ASN_PRIMITIVE | 4)
                     35: 
                     36: #define SMUX_GET        (ASN_CONTEXT | ASN_CONSTRUCTOR | 0)
                     37: #define SMUX_GETNEXT    (ASN_CONTEXT | ASN_CONSTRUCTOR | 1)
                     38: #define SMUX_GETRSP     (ASN_CONTEXT | ASN_CONSTRUCTOR | 2)
                     39: #define SMUX_SET       (ASN_CONTEXT | ASN_CONSTRUCTOR | 3)
                     40: #define SMUX_TRAP      (ASN_CONTEXT | ASN_CONSTRUCTOR | 4)
                     41: 
                     42: #define SMUX_MAX_FAILURE 3
                     43: 
                     44: /* Structures here are mostly compatible with UCD SNMP 4.1.1 */
                     45: #define MATCH_FAILED     (-1)
                     46: #define MATCH_SUCCEEDED  0
                     47: 
                     48: /* SYNTAX TruthValue from SNMPv2-TC. */
                     49: #define SNMP_TRUE  1
                     50: #define SNMP_FALSE 2
                     51: 
                     52: /* SYNTAX RowStatus from SNMPv2-TC. */
                     53: #define SNMP_VALID  1
                     54: #define SNMP_INVALID 2
                     55: 
                     56: #define IN_ADDR_SIZE sizeof(struct in_addr)
                     57: 
                     58: struct variable;
                     59: 
                     60: #define REGISTER_MIB(descr, var, vartype, theoid)              \
                     61:     smux_register_mib(descr, (struct variable *)var, sizeof(struct vartype), \
                     62:     sizeof(var)/sizeof(struct vartype),                        \
                     63:     theoid, sizeof(theoid)/sizeof(oid))
                     64: 
                     65: typedef int (WriteMethod)(int action,
                     66:                          u_char  *var_val,
                     67:                          u_char   var_val_type,
                     68:                          size_t   var_val_len,
                     69:                          u_char  *statP,
                     70:                          oid     *name,
                     71:                          size_t   length,
                     72:                          struct variable *v);
                     73: 
                     74: typedef u_char *(FindVarMethod)(struct variable *v,
                     75:                                oid     *name,
                     76:                                size_t  *length,
                     77:                                int      exact,
                     78:                                size_t  *var_len,
                     79:                                WriteMethod   **write_method);
                     80: 
                     81: /* SNMP variable */
                     82: struct variable
                     83: {
                     84:   /* Index of the MIB.*/
                     85:   u_char magic;
                     86: 
                     87:   /* Type of variable. */
                     88:   char type;
                     89: 
                     90:   /* Access control list. */
                     91:   u_short acl;
                     92: 
                     93:   /* Callback function. */
                     94:   FindVarMethod *findVar;
                     95: 
                     96:   /* Suffix of the MIB. */
                     97:   int namelen;
                     98:   oid name[MAX_OID_LEN];
                     99: };
                    100: 
                    101: /* SNMP tree. */
                    102: struct subtree
                    103: {
                    104:   /* Tree's oid. */
                    105:   oid name[MAX_OID_LEN];
                    106:   u_char name_len;
                    107: 
                    108:   /* List of the variables. */
                    109:   struct variable *variables;
                    110: 
                    111:   /* Length of the variables list. */
                    112:   int variables_num;
                    113: 
                    114:   /* Width of the variables list. */
                    115:   int variables_width;
                    116: 
                    117:   /* Registered flag. */
                    118:   int registered;
                    119: };
                    120: 
                    121: struct trap_object
                    122: {
                    123:   FindVarMethod *findVar;
                    124:   int namelen;
                    125:   oid name[MAX_OID_LEN];
                    126: };
                    127: 
                    128: /* Declare SMUX return value. */
                    129: #define SNMP_LOCAL_VARIABLES \
                    130:   static long snmp_int_val; \
                    131:   static struct in_addr snmp_in_addr_val;
                    132: 
                    133: #define SNMP_INTEGER(V) \
                    134:   ( \
                    135:     *var_len = sizeof (snmp_int_val), \
                    136:     snmp_int_val = V, \
                    137:     (u_char *) &snmp_int_val \
                    138:   )
                    139: 
                    140: #define SNMP_IPADDRESS(V) \
                    141:   ( \
                    142:     *var_len = sizeof (struct in_addr), \
                    143:     snmp_in_addr_val = V, \
                    144:     (u_char *) &snmp_in_addr_val \
                    145:   )
                    146: 
                    147: extern void smux_init (struct thread_master *tm);
                    148: extern void smux_start (void);
                    149: extern void smux_register_mib(const char *, struct variable *, 
                    150:                               size_t, int, oid [], size_t);
                    151: extern int smux_header_generic (struct variable *, oid [], size_t *, 
                    152:                                 int, size_t *, WriteMethod **);
                    153: extern int smux_trap (const oid *, size_t, const oid *, size_t, 
                    154:                      const struct trap_object *, 
                    155:                       size_t, unsigned int, u_char);
                    156: extern int oid_compare (oid *, int, oid *, int);
                    157: extern void oid2in_addr (oid [], int, struct in_addr *);
                    158: extern void *oid_copy (void *, const void *, size_t);
                    159: extern void oid_copy_addr (oid [], struct in_addr *, int);
                    160: 
                    161: #endif /* _ZEBRA_SNMP_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>