|
|
1.1 ! root 1: /* clnp.c - MIB realization of the experimental CLNP group */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/snmp/RCS/clnp.c,v 7.5 90/07/09 14:48:34 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/snmp/RCS/clnp.c,v 7.5 90/07/09 14:48:34 mrose Exp $ ! 9: * ! 10: * Contributed by NYSERNet Inc. This work was partially supported by the ! 11: * U.S. Defense Advanced Research Projects Agency and the Rome Air Development ! 12: * Center of the U.S. Air Force Systems Command under contract number ! 13: * F30602-88-C-0016. ! 14: * ! 15: * ! 16: * $Log: clnp.c,v $ ! 17: * Revision 7.5 90/07/09 14:48:34 mrose ! 18: * sync ! 19: * ! 20: * Revision 7.4 90/05/22 20:30:21 mrose ! 21: * cache ! 22: * ! 23: * Revision 7.3 90/02/27 18:49:28 mrose ! 24: * unix stuff ! 25: * ! 26: * Revision 7.2 90/02/17 10:37:37 mrose ! 27: * smux ! 28: * ! 29: * Revision 7.1 90/01/11 18:33:54 mrose ! 30: * real-sync ! 31: * ! 32: * Revision 7.0 89/11/23 22:22:55 mrose ! 33: * Release 6.0 ! 34: * ! 35: */ ! 36: ! 37: /* ! 38: * NOTICE ! 39: * ! 40: * Acquisition, use, and distribution of this module and related ! 41: * materials are subject to the restrictions of a license agreement. ! 42: * Consult the Preface in the User's Manual for the full terms of ! 43: * this agreement. ! 44: * ! 45: */ ! 46: ! 47: ! 48: #include <stdio.h> ! 49: #include "mib.h" ! 50: #include "interfaces.h" ! 51: #include "routes.h" ! 52: ! 53: #ifdef BSD44 ! 54: #include <sys/kinfo.h> ! 55: #include <net/if_dl.h> ! 56: #include <netiso/iso_snpac.h> ! 57: #define CLNP_ER_CODES ! 58: #include <netiso/clnp.h> ! 59: #include <netiso/clnp_stat.h> ! 60: #include <netiso/esis.h> ! 61: ! 62: /* */ ! 63: ! 64: #define FORW_IS 1 /* clnpForwarding */ ! 65: #define FORW_ES 2 ! 66: static int iso_systype; ! 67: ! 68: static struct clnp_stat clnp_stat; ! 69: ! 70: /* */ ! 71: ! 72: #define clnpForwarding 0 ! 73: #define clnpDefaultLifeTime 1 ! 74: #define clnpInReceives 2 ! 75: #define clnpInHdrErrors 3 ! 76: #define clnpInAddrErrors 4 ! 77: #define clnpForwPDUs 5 ! 78: #undef clnpInUnknownNLPs 6 /* NOT IMPLEMENTED */ ! 79: #define clnpInUnknownULPs 7 ! 80: #undef clnpInDiscards 8 /* NOT IMPLEMENTED */ ! 81: #define clnpInDelivers 9 ! 82: #define clnpOutRequests 10 ! 83: #define clnpOutDiscards 11 ! 84: #define clnpOutNoRoutes 12 ! 85: #define clnpReasmTimeout 13 ! 86: #define clnpReasmReqds 14 ! 87: #define clnpReasmOKs 15 ! 88: #define clnpReasmFails 16 ! 89: #define clnpSegOKs 17 ! 90: #define clnpSegFails 18 ! 91: #define clnpSegCreates 19 ! 92: #undef clnpInOpts 20 /* NOT IMPLEMENTED */ ! 93: #undef clnpInOpts 21 /* NOT IMPLEMENTED */ ! 94: ! 95: #define clnpInErrors (100 + 0) ! 96: #define clnpOutErrors (100 + 1) ! 97: #define clnpInErrUnspecs (100 + 2) ! 98: #define clnpInErrProcs (100 + 3) ! 99: #define clnpInErrCksums (100 + 4) ! 100: #define clnpInErrCongests (100 + 5) ! 101: #define clnpInErrHdrs (100 + 6) ! 102: #define clnpInErrSegs (100 + 7) ! 103: #define clnpInErrIncomps (100 + 8) ! 104: #define clnpInErrDups (100 + 9) ! 105: #define clnpInErrUnreachDsts (100 + 10) ! 106: #define clnpInErrUnknownDsts (100 + 11) ! 107: #define clnpInErrSRUnspecs (100 + 12) ! 108: #define clnpInErrSRSyntaxes (100 + 13) ! 109: #define clnpInErrSRUnkAddrs (100 + 14) ! 110: #define clnpInErrSRBadPaths (100 + 15) ! 111: #define clnpInErrHops (100 + 16) ! 112: #define clnpInErrHopReassms (100 + 17) ! 113: #define clnpInErrUnsOptions (100 + 18) ! 114: #define clnpInErrUnsVersions (100 + 19) ! 115: #define clnpInErrUnsSecurities (100 + 20) ! 116: #define clnpInErrUnsSRs (100 + 21) ! 117: #define clnpInErrUnsRRs (100 + 22) ! 118: #define clnpInErrInterferences (100 + 23) ! 119: #define clnpOutErrUnspecs (100 + 24) ! 120: #define clnpOutErrProcs (100 + 25) ! 121: #define clnpOutErrCksums (100 + 26) ! 122: #define clnpOutErrCongests (100 + 27) ! 123: #define clnpOutErrHdrs (100 + 28) ! 124: #define clnpOutErrSegs (100 + 29) ! 125: #define clnpOutErrIncomps (100 + 30) ! 126: #define clnpOutErrDups (100 + 31) ! 127: #define clnpOutErrUnreachDsts (100 + 32) ! 128: #define clnpOutErrUnknownDsts (100 + 33) ! 129: #define clnpOutErrSRUnspecs (100 + 34) ! 130: #define clnpOutErrSRSyntaxes (100 + 35) ! 131: #define clnpOutErrSRUnkAddrs (100 + 36) ! 132: #define clnpOutErrSRBadPaths (100 + 37) ! 133: #define clnpOutErrHops (100 + 38) ! 134: #define clnpOutErrHopReassms (100 + 39) ! 135: #define clnpOutErrUnsOptions (100 + 40) ! 136: #define clnpOutErrUnsVersions (100 + 41) ! 137: #define clnpOutErrUnsSecurities (100 + 42) ! 138: #define clnpOutErrUnsSRs (100 + 43) ! 139: #define clnpOutErrUnsRRs (100 + 44) ! 140: #define clnpOutErrInterferences (100 + 45) ! 141: ! 142: ! 143: static int o_clnp (oi, v, offset) ! 144: OI oi; ! 145: register struct type_SNMP_VarBind *v; ! 146: int offset; ! 147: { ! 148: register int *dp, ! 149: *ep, ! 150: j; ! 151: int ifvar; ! 152: register struct clnp_stat *cns = &clnp_stat; ! 153: register OID oid = oi -> oi_name; ! 154: register OT ot = oi -> oi_type; ! 155: static int lastq = -1; ! 156: ! 157: ifvar = (int) ot -> ot_info; ! 158: switch (offset) { ! 159: case type_SNMP_PDUs_get__request: ! 160: if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1 ! 161: || oid -> oid_elements[oid -> oid_nelem - 1] != 0) ! 162: return int_SNMP_error__status_noSuchName; ! 163: break; ! 164: ! 165: case type_SNMP_PDUs_get__next__request: ! 166: if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) { ! 167: OID new; ! 168: ! 169: if ((new = oid_extend (oid, 1)) == NULLOID) ! 170: return int_SNMP_error__status_genErr; ! 171: new -> oid_elements[new -> oid_nelem - 1] = 0; ! 172: ! 173: if (v -> name) ! 174: free_SNMP_ObjectName (v -> name); ! 175: v -> name = new; ! 176: } ! 177: else ! 178: return NOTOK; ! 179: break; ! 180: ! 181: default: ! 182: return int_SNMP_error__status_genErr; ! 183: } ! 184: ! 185: switch (ifvar) { ! 186: case clnpDefaultLifeTime: ! 187: case clnpReasmTimeout: ! 188: break; ! 189: ! 190: default: ! 191: if (quantum != lastq) { ! 192: lastq = quantum; ! 193: ! 194: if (getkmem (nl + N_ISO_SYSTYPE, (caddr_t) &iso_systype, ! 195: sizeof iso_systype) == NOTOK ! 196: || getkmem (nl + N_CLNP_STAT, (caddr_t) cns, ! 197: sizeof *cns) == NOTOK) ! 198: return int_SNMP_error__status_genErr; ! 199: } ! 200: break; ! 201: } ! 202: ! 203: switch (ifvar) { ! 204: case clnpForwarding: ! 205: return o_integer (oi, v, ! 206: iso_systype & SNPA_ES ? FORW_ES : FORW_IS); ! 207: ! 208: case clnpDefaultLifeTime: ! 209: return o_integer (oi, v, CLNP_TTL); ! 210: ! 211: case clnpInReceives: ! 212: return o_integer (oi, v, cns -> cns_total); ! 213: ! 214: case clnpInHdrErrors: ! 215: return o_integer (oi, v, cns -> cns_toosmall ! 216: + cns -> cns_badhlen ! 217: + cns -> cns_badcsum ! 218: + cns -> cns_noseg ! 219: + cns -> cns_badvers); ! 220: ! 221: case clnpInAddrErrors: ! 222: return o_integer (oi, v, cns -> cns_badaddr); ! 223: ! 224: case clnpForwPDUs: ! 225: return o_integer (oi, v, cns -> cns_forward); ! 226: ! 227: case clnpInUnknownULPs: ! 228: return o_integer (oi, v, cns -> cns_noproto); ! 229: ! 230: case clnpInDelivers: ! 231: return o_integer (oi, v, cns -> cns_delivered); ! 232: ! 233: case clnpOutRequests: ! 234: return o_integer (oi, v, cns -> cns_sent - cns -> cns_forward); ! 235: ! 236: case clnpOutDiscards: ! 237: return o_integer (oi, v, cns -> cns_odropped); ! 238: ! 239: case clnpOutNoRoutes: ! 240: return o_integer (oi, v, cns -> cns_cantforward); ! 241: ! 242: case clnpReasmTimeout: ! 243: return o_integer (oi, v, CLNP_TTL); ! 244: ! 245: case clnpReasmReqds: ! 246: return o_integer (oi, v, cns -> cns_fragments); ! 247: ! 248: case clnpReasmOKs: ! 249: return o_integer (oi, v, cns -> cns_reassembled); ! 250: ! 251: case clnpReasmFails: ! 252: return o_integer (oi, v, cns -> cns_fragdropped ! 253: + cns -> cns_fragtimeout); ! 254: ! 255: case clnpSegOKs: ! 256: return o_integer (oi, v, cns -> cns_fragmented); ! 257: ! 258: case clnpSegFails: ! 259: return o_integer (oi, v, cns -> cns_cantfrag); ! 260: ! 261: case clnpSegCreates: ! 262: return o_integer (oi, v, cns -> cns_ofragments); ! 263: ! 264: case clnpInErrors: ! 265: j = 0; ! 266: for (ep = (dp = cns -> cns_er_inhist) + CLNP_ERRORS; dp <= ep; ) ! 267: j += *dp++; ! 268: return o_integer (oi, v, j); ! 269: ! 270: case clnpOutErrors: ! 271: j = 0; ! 272: for (ep = (dp = cns -> cns_er_outhist) + CLNP_ERRORS; dp <= ep; ) ! 273: j += *dp++; ! 274: return o_integer (oi, v, j); ! 275: ! 276: #define clnpInputError(r) cns -> cns_er_inhist[clnp_er_index (r)] ! 277: ! 278: case clnpInErrUnspecs: ! 279: return o_integer (oi, v, clnpInputError (GEN_NOREAS)); ! 280: ! 281: case clnpInErrProcs: ! 282: return o_integer (oi, v, clnpInputError (GEN_PROTOERR)); ! 283: ! 284: case clnpInErrCksums: ! 285: return o_integer (oi, v, clnpInputError (GEN_BADCSUM)); ! 286: ! 287: case clnpInErrCongests: ! 288: return o_integer (oi, v, clnpInputError (GEN_CONGEST)); ! 289: ! 290: case clnpInErrHdrs: ! 291: return o_integer (oi, v, clnpInputError (GEN_HDRSYNTAX)); ! 292: ! 293: case clnpInErrSegs: ! 294: return o_integer (oi, v, clnpInputError (GEN_SEGNEEDED)); ! 295: ! 296: case clnpInErrIncomps: ! 297: return o_integer (oi, v, clnpInputError (GEN_INCOMPLETE)); ! 298: ! 299: case clnpInErrDups: ! 300: return o_integer (oi, v, clnpInputError (GEN_DUPOPT)); ! 301: ! 302: case clnpInErrUnreachDsts: ! 303: return o_integer (oi, v, clnpInputError (ADDR_DESTUNREACH)); ! 304: ! 305: case clnpInErrUnknownDsts: ! 306: return o_integer (oi, v, clnpInputError (ADDR_DESTUNKNOWN)); ! 307: ! 308: case clnpInErrSRUnspecs: ! 309: return o_integer (oi, v, clnpInputError (SRCRT_UNSPECERR)); ! 310: ! 311: case clnpInErrSRSyntaxes: ! 312: return o_integer (oi, v, clnpInputError (SRCRT_SYNTAX)); ! 313: ! 314: case clnpInErrSRUnkAddrs: ! 315: return o_integer (oi, v, clnpInputError (SRCRT_UNKNOWNADDR)); ! 316: ! 317: case clnpInErrSRBadPaths: ! 318: return o_integer (oi, v, clnpInputError (SRCRT_BADPATH)); ! 319: ! 320: case clnpInErrHops: ! 321: return o_integer (oi, v, clnpInputError (TTL_EXPTRANSIT)); ! 322: ! 323: case clnpInErrHopReassms: ! 324: return o_integer (oi, v, clnpInputError (TTL_EXPREASS)); ! 325: ! 326: case clnpInErrUnsOptions: ! 327: return o_integer (oi, v, clnpInputError (DISC_UNSUPPOPT)); ! 328: ! 329: case clnpInErrUnsVersions: ! 330: return o_integer (oi, v, clnpInputError (DISC_UNSUPPVERS)); ! 331: ! 332: case clnpInErrUnsSecurities: ! 333: return o_integer (oi, v, clnpInputError (DISC_UNSUPPSECURE)); ! 334: ! 335: case clnpInErrUnsSRs: ! 336: return o_integer (oi, v, clnpInputError (DISC_UNSUPPSRCRT)); ! 337: ! 338: case clnpInErrUnsRRs: ! 339: return o_integer (oi, v, clnpInputError (DISC_UNSUPPRECRT)); ! 340: ! 341: case clnpInErrInterferences: ! 342: return o_integer (oi, v, clnpInputError (REASS_INTERFERE)); ! 343: ! 344: #undef clnpInputError ! 345: #define clnpOutputError(r) cns -> cns_er_outhist[clnp_er_index (r)] ! 346: ! 347: case clnpOutErrUnspecs: ! 348: return o_integer (oi, v, clnpOutputError (GEN_NOREAS)); ! 349: ! 350: case clnpOutErrProcs: ! 351: return o_integer (oi, v, clnpOutputError (GEN_PROTOERR)); ! 352: ! 353: case clnpOutErrCksums: ! 354: return o_integer (oi, v, clnpOutputError (GEN_BADCSUM)); ! 355: ! 356: case clnpOutErrCongests: ! 357: return o_integer (oi, v, clnpOutputError (GEN_CONGEST)); ! 358: ! 359: case clnpOutErrHdrs: ! 360: return o_integer (oi, v, clnpOutputError (GEN_HDRSYNTAX)); ! 361: ! 362: case clnpOutErrSegs: ! 363: return o_integer (oi, v, clnpOutputError (GEN_SEGNEEDED)); ! 364: ! 365: case clnpOutErrIncomps: ! 366: return o_integer (oi, v, clnpOutputError (GEN_INCOMPLETE)); ! 367: ! 368: case clnpOutErrDups: ! 369: return o_integer (oi, v, clnpOutputError (GEN_DUPOPT)); ! 370: ! 371: case clnpOutErrUnreachDsts: ! 372: return o_integer (oi, v, clnpOutputError (ADDR_DESTUNREACH)); ! 373: ! 374: case clnpOutErrUnknownDsts: ! 375: return o_integer (oi, v, clnpOutputError (ADDR_DESTUNKNOWN)); ! 376: ! 377: case clnpOutErrSRUnspecs: ! 378: return o_integer (oi, v, clnpOutputError (SRCRT_UNSPECERR)); ! 379: ! 380: case clnpOutErrSRSyntaxes: ! 381: return o_integer (oi, v, clnpOutputError (SRCRT_SYNTAX)); ! 382: ! 383: case clnpOutErrSRUnkAddrs: ! 384: return o_integer (oi, v, clnpOutputError (SRCRT_UNKNOWNADDR)); ! 385: ! 386: case clnpOutErrSRBadPaths: ! 387: return o_integer (oi, v, clnpOutputError (SRCRT_BADPATH)); ! 388: ! 389: case clnpOutErrHops: ! 390: return o_integer (oi, v, clnpOutputError (TTL_EXPTRANSIT)); ! 391: ! 392: case clnpOutErrHopReassms: ! 393: return o_integer (oi, v, clnpOutputError (TTL_EXPREASS)); ! 394: ! 395: case clnpOutErrUnsOptions: ! 396: return o_integer (oi, v, clnpOutputError (DISC_UNSUPPOPT)); ! 397: ! 398: case clnpOutErrUnsVersions: ! 399: return o_integer (oi, v, clnpOutputError (DISC_UNSUPPVERS)); ! 400: ! 401: case clnpOutErrUnsSecurities: ! 402: return o_integer (oi, v, clnpOutputError (DISC_UNSUPPSECURE)); ! 403: ! 404: case clnpOutErrUnsSRs: ! 405: return o_integer (oi, v, clnpOutputError (DISC_UNSUPPSRCRT)); ! 406: ! 407: case clnpOutErrUnsRRs: ! 408: return o_integer (oi, v, clnpOutputError (DISC_UNSUPPRECRT)); ! 409: ! 410: case clnpOutErrInterferences: ! 411: return o_integer (oi, v, clnpOutputError (REASS_INTERFERE)); ! 412: ! 413: #undef clnpOutputError ! 414: ! 415: default: ! 416: return int_SNMP_error__status_noSuchName; ! 417: } ! 418: } ! 419: ! 420: /* */ ! 421: ! 422: static int clnp_er_index (p) ! 423: u_char p; ! 424: { ! 425: register u_char *cp = clnp_er_codes + CLNP_ERRORS; ! 426: ! 427: while (cp-- > clnp_er_codes) ! 428: if (*cp == p) ! 429: return (cp - clnp_er_codes); ! 430: ! 431: return (CLNP_ERRORS + 1); ! 432: } ! 433: ! 434: /* */ ! 435: ! 436: #define CLNP_MAXPACKET 65535 /* clnpAdEntReasmMaxSize */ ! 437: /* equivalent of IP_MAXPACKET */ ! 438: ! 439: ! 440: #define clnpAdEntAddr 0 ! 441: #define clnpAdEntIfIndex 1 ! 442: #define clnpAdEntNetMask 2 ! 443: #define clnpAdEntReasmMaxSize 3 ! 444: ! 445: ! 446: static int o_clnp_addr (oi, v, offset) ! 447: OI oi; ! 448: register struct type_SNMP_VarBind *v; ! 449: int offset; ! 450: { ! 451: register int i; ! 452: int ifvar; ! 453: register unsigned int *ip, ! 454: *jp; ! 455: register struct address *as; ! 456: register OID oid = oi -> oi_name; ! 457: register OT ot = oi -> oi_type; ! 458: ! 459: if (sort_interfaces () == NOTOK) ! 460: return int_SNMP_error__status_genErr; ! 461: ! 462: ifvar = (int) ot -> ot_info; ! 463: switch (offset) { ! 464: case type_SNMP_PDUs_get__request: ! 465: if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem) ! 466: return int_SNMP_error__status_noSuchName; ! 467: if ((as = get_addrent (oid -> oid_elements ! 468: + ot -> ot_name -> oid_nelem, ! 469: oid -> oid_nelem ! 470: - ot -> ot_name -> oid_nelem, ! 471: afs_iso, 0)) == NULL) ! 472: return int_SNMP_error__status_noSuchName; ! 473: break; ! 474: ! 475: case type_SNMP_PDUs_get__next__request: ! 476: if (oid -> oid_nelem < ot -> ot_name -> oid_nelem) ! 477: return int_SNMP_error__status_noSuchName; ! 478: if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) { ! 479: OID new; ! 480: ! 481: if ((as = afs_iso) == NULL) ! 482: return NOTOK; ! 483: ! 484: if ((new = oid_extend (oid, as -> adr_insize)) == NULLOID) ! 485: return int_SNMP_error__status_genErr; ! 486: ip = new -> oid_elements + new -> oid_nelem - as -> adr_insize; ! 487: jp = as -> adr_instance; ! 488: for (i = as -> adr_insize; i > 0; i--) ! 489: *ip++ = *jp++; ! 490: ! 491: if (v -> name) ! 492: free_SNMP_ObjectName (v -> name); ! 493: v -> name = new; ! 494: } ! 495: else { ! 496: int j; ! 497: ! 498: if ((as = get_addrent (oid -> oid_elements ! 499: + ot -> ot_name -> oid_nelem, ! 500: j = oid -> oid_nelem ! 501: - ot -> ot_name -> oid_nelem, ! 502: afs_iso, 1)) == NULL) ! 503: return NOTOK; ! 504: ! 505: if ((i = j - as -> adr_insize) < 0) { ! 506: OID new; ! 507: ! 508: if ((new = oid_extend (oid, -i)) == NULLOID) ! 509: return int_SNMP_error__status_genErr; ! 510: if (v -> name) ! 511: free_SNMP_ObjectName (v -> name); ! 512: v -> name = new; ! 513: ! 514: oid = new; ! 515: } ! 516: else ! 517: if (i > 0) ! 518: oid -> oid_nelem -= i; ! 519: ! 520: ip = oid -> oid_elements + ot -> ot_name -> oid_nelem; ! 521: jp = as -> adr_instance; ! 522: for (i = as -> adr_insize; i > 0; i--) ! 523: *ip++ = *jp++; ! 524: } ! 525: break; ! 526: ! 527: default: ! 528: return int_SNMP_error__status_genErr; ! 529: } ! 530: ! 531: switch (ifvar) { ! 532: case clnpAdEntAddr: ! 533: return o_clnpaddr (oi, v, ! 534: (struct sockaddr_iso *) &as -> adr_address); ! 535: ! 536: case clnpAdEntIfIndex: ! 537: return o_integer (oi, v, ffs (as -> adr_indexmask)); ! 538: ! 539: case clnpAdEntNetMask: ! 540: return o_clnpaddr (oi, v, ! 541: (struct sockaddr_iso *) &as -> adr_netmask); ! 542: ! 543: case clnpAdEntReasmMaxSize: ! 544: return o_integer (oi, v, CLNP_MAXPACKET); ! 545: ! 546: default: ! 547: return int_SNMP_error__status_noSuchName; ! 548: } ! 549: } ! 550: ! 551: /* */ ! 552: ! 553: #define clnpRouteDest 0 ! 554: #define clnpRouteIfIndex 1 ! 555: #define clnpRouteMetric1 2 ! 556: #define clnpRouteMetric2 3 ! 557: #define clnpRouteMetric3 4 ! 558: #define clnpRouteMetric4 5 ! 559: #define clnpRouteNextHop 6 ! 560: #define clnpRouteType 7 ! 561: #define clnpRouteProto 8 ! 562: #define clnpRouteAge 9 ! 563: #define unixClnpRouteFlags 10 ! 564: #define unixClnpRouteRefCnt 11 ! 565: #define unixClnpRouteUses 12 ! 566: ! 567: ! 568: static int o_clnp_route (oi, v, offset) ! 569: OI oi; ! 570: register struct type_SNMP_VarBind *v; ! 571: int offset; ! 572: { ! 573: int ifvar; ! 574: register int i; ! 575: register unsigned int *ip, ! 576: *jp; ! 577: register struct rtetab *rt; ! 578: register OID oid = oi -> oi_name; ! 579: register OT ot = oi -> oi_type; ! 580: ! 581: if (get_routes (offset) == NOTOK) ! 582: return int_SNMP_error__status_genErr; ! 583: ! 584: ifvar = (int) ot -> ot_info; ! 585: switch (offset) { ! 586: case type_SNMP_PDUs_get__request: ! 587: if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem) ! 588: return int_SNMP_error__status_noSuchName; ! 589: if ((rt = get_rtent (oid -> oid_elements ! 590: + ot -> ot_name -> oid_nelem, ! 591: oid -> oid_nelem ! 592: - ot -> ot_name -> oid_nelem, ! 593: rts_iso, 0)) == NULL) ! 594: return int_SNMP_error__status_noSuchName; ! 595: break; ! 596: ! 597: case type_SNMP_PDUs_get__next__request: ! 598: if (oid -> oid_nelem < ot -> ot_name -> oid_nelem) ! 599: return int_SNMP_error__status_noSuchName; ! 600: if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) { ! 601: OID new; ! 602: ! 603: if ((rt = rts_iso) == NULL) ! 604: return NOTOK; ! 605: ! 606: if ((new = oid_extend (oid, rt -> rt_insize)) == NULLOID) ! 607: return int_SNMP_error__status_genErr; ! 608: ip = new -> oid_elements + new -> oid_nelem - rt -> rt_insize; ! 609: jp = rt -> rt_instance; ! 610: for (i = rt -> rt_insize; i > 0; i--) ! 611: *ip++ = *jp++; ! 612: ! 613: if (v -> name) ! 614: free_SNMP_ObjectName (v -> name); ! 615: v -> name = new; ! 616: } ! 617: else { ! 618: int j; ! 619: ! 620: if ((rt = get_rtent (oid -> oid_elements ! 621: + ot -> ot_name -> oid_nelem, ! 622: j = oid -> oid_nelem ! 623: - ot -> ot_name -> oid_nelem, ! 624: rts_iso, 1)) == NULL) ! 625: return NOTOK; ! 626: ! 627: if ((i = j - rt -> rt_insize) < 0) { ! 628: OID new; ! 629: ! 630: if ((new = oid_extend (oid, -i)) == NULLOID) ! 631: return int_SNMP_error__status_genErr; ! 632: if (v -> name) ! 633: free_SNMP_ObjectName (v -> name); ! 634: v -> name = new; ! 635: ! 636: oid = new; ! 637: } ! 638: else ! 639: if (i > 0) ! 640: oid -> oid_nelem -= i; ! 641: ! 642: ip = oid -> oid_elements + ot -> ot_name -> oid_nelem; ! 643: jp = rt -> rt_instance; ! 644: for (i = rt -> rt_insize; i > 0; i--) ! 645: *ip++ = *jp++; ! 646: } ! 647: break; ! 648: ! 649: default: ! 650: return int_SNMP_error__status_genErr; ! 651: } ! 652: ! 653: switch (ifvar) { ! 654: case clnpRouteDest: ! 655: return o_clnpaddr (oi, v, ! 656: (struct sockaddr_iso *) &rt -> rt_dst); ! 657: ! 658: case clnpRouteIfIndex: ! 659: { ! 660: register struct interface *is; ! 661: ! 662: for (is = ifs; is; is = is -> ifn_next) ! 663: if ((caddr_t) is -> ifn_offset ! 664: == (caddr_t) rt -> rt_rt.rt_ifp) { ! 665: if (is -> ifn_ready) ! 666: return o_integer (oi, v, is -> ifn_index); ! 667: break; ! 668: } ! 669: ! 670: if (offset == type_SNMP_PDUs_get__next__request) ! 671: return NOTOK; ! 672: return int_SNMP_error__status_noSuchName; ! 673: } ! 674: ! 675: case clnpRouteMetric1: ! 676: case clnpRouteMetric2: ! 677: case clnpRouteMetric3: ! 678: case clnpRouteMetric4: ! 679: return o_integer (oi, v, METRIC_NONE); ! 680: ! 681: case clnpRouteNextHop: ! 682: return o_clnpaddr (oi, v, ! 683: (struct sockaddr_iso *) &rt -> rt_gateway); ! 684: ! 685: case clnpRouteType: ! 686: switch (rt -> rt_rt.rt_flags & (RTF_GATEWAY | RTF_HOST)) { ! 687: case RTF_GATEWAY: ! 688: case RTF_HOST: ! 689: return o_integer (oi, v, TYPE_REMOTE); ! 690: ! 691: case 0: ! 692: return o_integer (oi, v, TYPE_DIRECT); ! 693: ! 694: default: ! 695: return o_integer (oi, v, TYPE_OTHER); ! 696: } ! 697: ! 698: case clnpRouteProto: ! 699: if (rt -> rt_rt.rt_flags & (RTF_DYNAMIC | RTF_MODIFIED)) ! 700: return o_integer (oi, v, PROTO_ESIS); ! 701: else ! 702: return o_integer (oi, v, PROTO_OTHER); ! 703: ! 704: case clnpRouteAge: ! 705: return o_integer (oi, v, 0); ! 706: ! 707: case unixClnpRouteFlags: ! 708: return o_integer (oi, v, rt -> rt_rt.rt_flags & 0xffff); ! 709: ! 710: case unixClnpRouteRefCnt: ! 711: return o_integer (oi, v, rt -> rt_rt.rt_refcnt & 0xffff); ! 712: ! 713: case unixClnpRouteUses: ! 714: return o_integer (oi, v, rt -> rt_rt.rt_use); ! 715: ! 716: default: ! 717: return int_SNMP_error__status_noSuchName; ! 718: } ! 719: } ! 720: ! 721: /* */ ! 722: ! 723: struct adrtab { ! 724: #define ADN_SIZE ADR_SIZE /* ClnpAddress instance */ ! 725: unsigned int adn_instance[ADN_SIZE]; ! 726: int adn_insize; ! 727: ! 728: struct iso_addr adn_address; /* ClnpAddress */ ! 729: ! 730: ! 731: #define ADM_SIZE ADR_SIZE /* PhysAddress instance */ ! 732: unsigned int adm_instance[ADM_SIZE]; ! 733: int adm_insize; ! 734: ! 735: u_char adm_address[ADM_SIZE]; /* PhysAddress */ ! 736: u_char adm_addrlen; /* .. */ ! 737: ! 738: ! 739: int adr_index; /* ifIndex */ ! 740: ! 741: int adr_type; /* clnpNetToMediaType */ ! 742: /* clnpMediaToNetType */ ! 743: #define DYNAMIC_MAPPING 3 ! 744: #define STATIC_MAPPING 4 ! 745: ! 746: ! 747: struct adrtab *adn_next; /* next ClnpAddress */ ! 748: struct adrtab *adm_next; /* next PhysAddress */ ! 749: }; ! 750: ! 751: static struct adrtab *adn = NULL; ! 752: static struct adrtab *adm = NULL; ! 753: ! 754: ! 755: static struct adrtab *get_arpent (); ! 756: ! 757: /* */ ! 758: ! 759: #define clnpNetToMediaIfIndex 0 ! 760: #define clnpNetToMediaPhysAddress 1 ! 761: #define clnpNetToMediaNetAddress 2 ! 762: #define clnpNetToMediaType 3 ! 763: #undef clnpNetToMediaAge 4 /* NOT IMPLEMENTED */ ! 764: #undef clnpNetToMediaHoldTime 5 /* NOT IMPLEMENTED */ ! 765: ! 766: #define clnpMediaToNetIfIndex 6 ! 767: #define clnpMediaToNetNetAddress 7 ! 768: #define clnpMediaToNetPhysAddress 8 ! 769: #define clnpMediaToNetType 9 ! 770: #undef clnpMediaToNetAge 10 /* NOT IMPLEMENTED */ ! 771: #undef clnpMediaToNetHoldTime 11 /* NOT IMPLEMENTED */ ! 772: ! 773: static int o_address (oi, v, offset) ! 774: OI oi; ! 775: register struct type_SNMP_VarBind *v; ! 776: int offset; ! 777: { ! 778: register int i; ! 779: int ifvar, ! 780: isnpa; ! 781: register unsigned int *ip, ! 782: *jp; ! 783: register struct adrtab *at; ! 784: struct sockaddr_iso netaddr; ! 785: register OID oid = oi -> oi_name; ! 786: register OT ot = oi -> oi_type; ! 787: ! 788: if (get_arptab () == NOTOK) ! 789: return int_SNMP_error__status_genErr; ! 790: ! 791: switch (ifvar = (int) ot -> ot_info) { ! 792: case clnpNetToMediaIfIndex: ! 793: case clnpNetToMediaPhysAddress: ! 794: case clnpNetToMediaNetAddress: ! 795: case clnpNetToMediaType: ! 796: isnpa = 0; ! 797: break; ! 798: ! 799: case clnpMediaToNetIfIndex: ! 800: case clnpMediaToNetNetAddress: ! 801: case clnpMediaToNetPhysAddress: ! 802: case clnpMediaToNetType: ! 803: isnpa = 1; ! 804: break; ! 805: } ! 806: ! 807: switch (offset) { ! 808: case type_SNMP_PDUs_get__request: ! 809: if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem) ! 810: return int_SNMP_error__status_noSuchName; ! 811: if ((at = get_arpent (oid -> oid_elements ! 812: + ot -> ot_name -> oid_nelem, ! 813: oid -> oid_nelem ! 814: - ot -> ot_name -> oid_nelem, ! 815: isnpa, 0)) == NULL) ! 816: return int_SNMP_error__status_noSuchName; ! 817: break; ! 818: ! 819: case type_SNMP_PDUs_get__next__request: ! 820: if (oid -> oid_nelem < ot -> ot_name -> oid_nelem) ! 821: return int_SNMP_error__status_noSuchName; ! 822: if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) { ! 823: OID new; ! 824: ! 825: if ((at = isnpa ? adm : adn) == NULL) ! 826: return NOTOK; ! 827: if (isnpa) ! 828: jp = at -> adm_instance, i = at -> adm_insize; ! 829: else ! 830: jp = at -> adn_instance, i = at -> adn_insize; ! 831: ! 832: if ((new = oid_extend (oid, i)) == NULLOID) ! 833: return int_SNMP_error__status_genErr; ! 834: ip = new -> oid_elements + new -> oid_nelem - i; ! 835: for (; i > 0; i--) ! 836: *ip++ = *jp++; ! 837: ! 838: if (v -> name) ! 839: free_SNMP_ObjectName (v -> name); ! 840: v -> name = new; ! 841: } ! 842: else { ! 843: int j; ! 844: ! 845: if ((at = get_arpent (oid -> oid_elements ! 846: + ot -> ot_name -> oid_nelem, ! 847: j = oid -> oid_nelem ! 848: - ot -> ot_name -> oid_nelem, ! 849: isnpa, 1)) == NULL) ! 850: return NOTOK; ! 851: i = isnpa ? at -> adm_insize : at -> adn_insize; ! 852: ! 853: if ((i = j - i) < 0) { ! 854: OID new; ! 855: ! 856: if ((new = oid_extend (oid, -i)) == NULLOID) ! 857: return int_SNMP_error__status_genErr; ! 858: if (v -> name) ! 859: free_SNMP_ObjectName (v -> name); ! 860: v -> name = new; ! 861: ! 862: oid = new; ! 863: } ! 864: else ! 865: if (i > 0) ! 866: oid -> oid_nelem -= i; ! 867: ! 868: ip = oid -> oid_elements + ot -> ot_name -> oid_nelem; ! 869: if (isnpa) ! 870: jp = at -> adm_instance, i = at -> adm_insize; ! 871: else ! 872: jp = at -> adn_instance, i = at -> adn_insize; ! 873: for (; i > 0; i--) ! 874: *ip++ = *jp++; ! 875: } ! 876: break; ! 877: ! 878: default: ! 879: return int_SNMP_error__status_genErr; ! 880: } ! 881: ! 882: switch (ifvar) { ! 883: case clnpNetToMediaIfIndex: ! 884: case clnpMediaToNetIfIndex: ! 885: return o_integer (oi, v, at -> adr_index); ! 886: ! 887: case clnpNetToMediaPhysAddress: ! 888: case clnpMediaToNetPhysAddress: ! 889: return o_string (oi, v, (char *) at -> adm_address, ! 890: (int) at -> adm_addrlen); ! 891: ! 892: case clnpNetToMediaNetAddress: ! 893: case clnpMediaToNetNetAddress: ! 894: netaddr.siso_addr = at -> adn_address; /* struct copy */ ! 895: return o_clnpaddr (oi, v, &netaddr); ! 896: ! 897: case clnpNetToMediaType: ! 898: case clnpMediaToNetType: ! 899: return o_integer (oi, v, at -> adr_type); ! 900: ! 901: default: ! 902: return int_SNMP_error__status_noSuchName; ! 903: } ! 904: } ! 905: ! 906: /* */ ! 907: ! 908: static int adn_compar (a, b) ! 909: register struct adrtab **a, ! 910: **b; ! 911: { ! 912: return elem_cmp ((*a) -> adn_instance, (*a) -> adn_insize, ! 913: (*b) -> adn_instance, (*b) -> adn_insize); ! 914: } ! 915: ! 916: ! 917: static int adm_compar (a, b) ! 918: register struct adrtab **a, ! 919: **b; ! 920: { ! 921: return elem_cmp ((*a) -> adm_instance, (*a) -> adm_insize, ! 922: (*b) -> adm_instance, (*b) -> adm_insize); ! 923: } ! 924: ! 925: ! 926: #define ROUND(a) (1 + (((a) - 1) | (sizeof (long) - 1))) ! 927: ! 928: static int get_arptab () { ! 929: int adrNumber = 0, ! 930: rlen, ! 931: tblsize; ! 932: char *snpac; ! 933: register char *sc, ! 934: *se; ! 935: register struct adrtab *at, ! 936: *ap, ! 937: **base, ! 938: **afe, ! 939: **afp; ! 940: register struct interface *is; ! 941: register struct rt_msghdr *rtm; ! 942: static int first_time = 1; ! 943: static int lastq = -1; ! 944: ! 945: if (quantum == lastq) ! 946: return OK; ! 947: lastq = quantum; ! 948: ! 949: for (at = adn; at; at = ap) { ! 950: ap = at -> adn_next; ! 951: ! 952: free ((char *) at); ! 953: } ! 954: adn = adm = NULL; ! 955: ! 956: if ((tblsize = getkerninfo (KINFO_RT_DUMP, NULLCP, NULLIP, 0)) == NOTOK) ! 957: return NOTOK; ! 958: if ((snpac = malloc ((unsigned) tblsize)) == NULL) ! 959: adios (NULLCP, "out of memory"); ! 960: if ((rlen = getkerninfo (KINFO_RT_DUMP, snpac, &tblsize, 0)) == NOTOK) { ! 961: free (snpac); ! 962: return NOTOK; ! 963: } ! 964: ! 965: afp = &adn; ! 966: for (se = (sc = snpac) + rlen; sc < se; sc += rtm -> rtm_msglen) { ! 967: register struct sockaddr_dl *sdl; ! 968: register struct sockaddr *sa; ! 969: struct iso_addr nsap; ! 970: ! 971: rtm = (struct rt_msghdr *) sc; ! 972: sa = (struct sockaddr *) (rtm + 1); ! 973: if (sa -> sa_family != AF_ISO) ! 974: continue; ! 975: ! 976: sdl = (struct sockaddr_dl *) (((caddr_t) sa) + ROUND (sa -> sa_len)); ! 977: if (sdl -> sdl_family != AF_LINK) ! 978: continue; ! 979: ! 980: nsap = ((struct sockaddr_iso *) sa) -> siso_addr; /* struct copy */ ! 981: if (nsap.isoa_len == 0) ! 982: continue; ! 983: ! 984: for (is = ifs; is; is = is -> ifn_next) ! 985: if (is -> ifn_interface.ac_if.if_index == rtm -> rtm_index) ! 986: break; ! 987: if (!is) { ! 988: if (first_time) ! 989: advise (LLOG_EXCEPTIONS, NULLCP, ! 990: "unable to find interface for SNPA in cache"); ! 991: continue; ! 992: } ! 993: ! 994: if ((at = (struct adrtab *) calloc (1, sizeof *at)) == NULL) ! 995: adios (NULLCP, "out of memory"); ! 996: *afp = at, afp = &at -> adn_next, adrNumber++; ! 997: ! 998: at -> adr_index = is -> ifn_index; ! 999: ! 1000: at -> adr_type = rtm -> rtm_flags & (RTF_DYNAMIC | RTF_MODIFIED) ! 1001: ? DYNAMIC_MAPPING : STATIC_MAPPING; ! 1002: ! 1003: at -> adn_address = nsap; /* struct copy */ ! 1004: at -> adn_instance[0] = at -> adr_index, at -> adn_insize = 1; ! 1005: at -> adn_insize += clnpaddr2oid (at -> adn_instance + 1, ! 1006: &at -> adn_address); ! 1007: ! 1008: bcopy ((char *) LLADDR (sdl), (char *) at -> adm_address, ! 1009: (int) (at -> adm_addrlen = sdl -> sdl_alen)); ! 1010: at -> adm_instance[0] = at -> adr_index, at -> adm_insize = 1; ! 1011: at -> adm_insize += mediaddr2oid (at -> adm_instance + 1, ! 1012: at -> adm_address, ! 1013: (int) at -> adm_addrlen, 0); ! 1014: ! 1015: if (debug && first_time) { ! 1016: char buffer[BUFSIZ]; ! 1017: OIDentifier oids; ! 1018: ! 1019: oids.oid_elements = at -> adn_instance; ! 1020: oids.oid_nelem = at -> adn_insize; ! 1021: (void) strcpy (buffer, sprintoid (&oids)); ! 1022: oids.oid_elements = at -> adm_instance; ! 1023: oids.oid_nelem = at -> adm_insize; ! 1024: advise (LLOG_DEBUG, NULLCP, ! 1025: "add mapping on interface %d: %s -> %s", ! 1026: at -> adr_index, buffer, sprintoid (&oids)); ! 1027: } ! 1028: } ! 1029: first_time = 0; ! 1030: free ((char *) snpac); ! 1031: ! 1032: if (adrNumber <= 1) { ! 1033: adm = adn; ! 1034: return OK; ! 1035: } ! 1036: ! 1037: if ((base = (struct adrtab **) ! 1038: malloc ((unsigned) (adrNumber * sizeof *base))) == NULL) ! 1039: adios (NULLCP, "out of memory"); ! 1040: ! 1041: afe = base; ! 1042: for (at = adn; at; at = at -> adn_next) ! 1043: *afe++ = at; ! 1044: ! 1045: qsort ((char *) base, adrNumber, sizeof *base, adn_compar); ! 1046: ! 1047: afp = base; ! 1048: at = adn = *afp++; ! 1049: while (afp < afe) { ! 1050: at -> adn_next = *afp; ! 1051: at = *afp++; ! 1052: } ! 1053: at -> adn_next = NULL; ! 1054: ! 1055: qsort ((char *) base, adrNumber, sizeof *base, adm_compar); ! 1056: ! 1057: afp = base; ! 1058: at = adm = *afp++; ! 1059: while (afp < afe) { ! 1060: at -> adm_next = *afp; ! 1061: at = *afp++; ! 1062: } ! 1063: at -> adm_next = NULL; ! 1064: ! 1065: free ((char *) base); ! 1066: ! 1067: return OK; ! 1068: } ! 1069: #undef ROUND ! 1070: ! 1071: /* */ ! 1072: ! 1073: static struct adrtab *get_arpent (ip, len, isnpa, isnext) ! 1074: register unsigned int *ip; ! 1075: int len; ! 1076: int isnpa, ! 1077: isnext; ! 1078: { ! 1079: register struct adrtab *at; ! 1080: ! 1081: if (isnpa) ! 1082: for (at = adm; at; at = at -> adm_next) ! 1083: switch (elem_cmp (at -> adm_instance, at -> adm_insize, ip, len)) { ! 1084: case 0: ! 1085: return (isnext ? at -> adm_next : at); ! 1086: ! 1087: case 1: ! 1088: return (isnext ? at : NULL); ! 1089: } ! 1090: else ! 1091: for (at = adn; at; at = at -> adn_next) ! 1092: switch (elem_cmp (at -> adn_instance, at -> adn_insize, ip, len)) { ! 1093: case 0: ! 1094: return (isnext ? at -> adn_next : at); ! 1095: ! 1096: case 1: ! 1097: return (isnext ? at : NULL); ! 1098: } ! 1099: ! 1100: return NULL; ! 1101: } ! 1102: ! 1103: /* */ ! 1104: ! 1105: static struct esis_stat esis_stat; ! 1106: ! 1107: /* */ ! 1108: ! 1109: #define esisESHins 0 ! 1110: #define esisESHouts 1 ! 1111: #define esisISHins 2 ! 1112: #define esisISHouts 3 ! 1113: #define esisRDUins 4 ! 1114: #define esisRDUouts 5 ! 1115: ! 1116: ! 1117: static int o_esis (oi, v, offset) ! 1118: OI oi; ! 1119: register struct type_SNMP_VarBind *v; ! 1120: int offset; ! 1121: { ! 1122: int ifvar; ! 1123: register struct esis_stat *es = &esis_stat; ! 1124: register OID oid = oi -> oi_name; ! 1125: register OT ot = oi -> oi_type; ! 1126: static int lastq = -1; ! 1127: ! 1128: ifvar = (int) ot -> ot_info; ! 1129: switch (offset) { ! 1130: case type_SNMP_PDUs_get__request: ! 1131: if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1 ! 1132: || oid -> oid_elements[oid -> oid_nelem - 1] != 0) ! 1133: return int_SNMP_error__status_noSuchName; ! 1134: break; ! 1135: ! 1136: case type_SNMP_PDUs_get__next__request: ! 1137: if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) { ! 1138: OID new; ! 1139: ! 1140: if ((new = oid_extend (oid, 1)) == NULLOID) ! 1141: return int_SNMP_error__status_genErr; ! 1142: new -> oid_elements[new -> oid_nelem - 1] = 0; ! 1143: ! 1144: if (v -> name) ! 1145: free_SNMP_ObjectName (v -> name); ! 1146: v -> name = new; ! 1147: } ! 1148: else ! 1149: return NOTOK; ! 1150: break; ! 1151: ! 1152: default: ! 1153: return int_SNMP_error__status_genErr; ! 1154: } ! 1155: ! 1156: if (quantum != lastq) { ! 1157: lastq = quantum; ! 1158: ! 1159: if (getkmem (nl + N_ESIS_STAT, (caddr_t) &esis_stat, sizeof esis_stat) ! 1160: == NOTOK) ! 1161: return int_SNMP_error__status_genErr; ! 1162: } ! 1163: ! 1164: switch (ifvar) { ! 1165: case esisESHins: ! 1166: return o_integer (oi, v, es -> es_eshrcvd); ! 1167: ! 1168: case esisESHouts: ! 1169: return o_integer (oi, v, es -> es_eshsent); ! 1170: ! 1171: case esisISHins: ! 1172: return o_integer (oi, v, es -> es_ishrcvd); ! 1173: ! 1174: case esisISHouts: ! 1175: return o_integer (oi, v, es -> es_ishsent); ! 1176: ! 1177: case esisRDUins: ! 1178: return o_integer (oi, v, es -> es_rdrcvd); ! 1179: ! 1180: case esisRDUouts: ! 1181: return o_integer (oi, v, es -> es_rdsent); ! 1182: ! 1183: default: ! 1184: return int_SNMP_error__status_noSuchName; ! 1185: } ! 1186: } ! 1187: ! 1188: /* */ ! 1189: ! 1190: init_clnp () { ! 1191: register OT ot; ! 1192: ! 1193: if (nl[N_ISO_SYSTYPE].n_value == 0) ! 1194: return; ! 1195: ! 1196: if (ot = text2obj ("clnpForwarding")) ! 1197: ot -> ot_getfnx = o_clnp, ! 1198: ot -> ot_info = (caddr_t) clnpForwarding; ! 1199: if (ot = text2obj ("clnpDefaultLifeTime")) ! 1200: ot -> ot_getfnx = o_clnp, ! 1201: ot -> ot_info = (caddr_t) clnpDefaultLifeTime; ! 1202: if (ot = text2obj ("clnpInReceives")) ! 1203: ot -> ot_getfnx = o_clnp, ! 1204: ot -> ot_info = (caddr_t) clnpInReceives; ! 1205: if (ot = text2obj ("clnpInHdrErrors")) ! 1206: ot -> ot_getfnx = o_clnp, ! 1207: ot -> ot_info = (caddr_t) clnpInHdrErrors; ! 1208: if (ot = text2obj ("clnpInAddrErrors")) ! 1209: ot -> ot_getfnx = o_clnp, ! 1210: ot -> ot_info = (caddr_t) clnpInAddrErrors; ! 1211: if (ot = text2obj ("clnpForwPDUs")) ! 1212: ot -> ot_getfnx = o_clnp, ! 1213: ot -> ot_info = (caddr_t) clnpForwPDUs; ! 1214: #ifdef clnpInUnknownNLPs ! 1215: if (ot = text2obj ("clnpInUnknownNLPs")) ! 1216: ot -> ot_getfnx = o_clnp, ! 1217: ot -> ot_info = (caddr_t) clnpInUnknownNLPs; ! 1218: #endif ! 1219: if (ot = text2obj ("clnpInUnknownULPs")) ! 1220: ot -> ot_getfnx = o_clnp, ! 1221: ot -> ot_info = (caddr_t) clnpInUnknownULPs; ! 1222: #ifdef clnpInDiscards ! 1223: if (ot = text2obj ("clnpInDiscards")) ! 1224: ot -> ot_getfnx = o_clnp, ! 1225: ot -> ot_info = (caddr_t) clnpInDiscards; ! 1226: #endif ! 1227: if (ot = text2obj ("clnpInDelivers")) ! 1228: ot -> ot_getfnx = o_clnp, ! 1229: ot -> ot_info = (caddr_t) clnpInDelivers; ! 1230: if (ot = text2obj ("clnpOutRequests")) ! 1231: ot -> ot_getfnx = o_clnp, ! 1232: ot -> ot_info = (caddr_t) clnpOutRequests; ! 1233: if (ot = text2obj ("clnpOutDiscards")) ! 1234: ot -> ot_getfnx = o_clnp, ! 1235: ot -> ot_info = (caddr_t) clnpOutDiscards; ! 1236: if (ot = text2obj ("clnpOutNoRoutes")) ! 1237: ot -> ot_getfnx = o_clnp, ! 1238: ot -> ot_info = (caddr_t) clnpOutNoRoutes; ! 1239: if (ot = text2obj ("clnpReasmTimeout")) ! 1240: ot -> ot_getfnx = o_clnp, ! 1241: ot -> ot_info = (caddr_t) clnpReasmTimeout; ! 1242: if (ot = text2obj ("clnpReasmReqds")) ! 1243: ot -> ot_getfnx = o_clnp, ! 1244: ot -> ot_info = (caddr_t) clnpReasmReqds; ! 1245: if (ot = text2obj ("clnpReasmOKs")) ! 1246: ot -> ot_getfnx = o_clnp, ! 1247: ot -> ot_info = (caddr_t) clnpReasmOKs; ! 1248: if (ot = text2obj ("clnpReasmFails")) ! 1249: ot -> ot_getfnx = o_clnp, ! 1250: ot -> ot_info = (caddr_t) clnpReasmFails; ! 1251: if (ot = text2obj ("clnpSegOKs")) ! 1252: ot -> ot_getfnx = o_clnp, ! 1253: ot -> ot_info = (caddr_t) clnpSegOKs; ! 1254: if (ot = text2obj ("clnpSegFails")) ! 1255: ot -> ot_getfnx = o_clnp, ! 1256: ot -> ot_info = (caddr_t) clnpSegFails; ! 1257: if (ot = text2obj ("clnpSegCreates")) ! 1258: ot -> ot_getfnx = o_clnp, ! 1259: ot -> ot_info = (caddr_t) clnpSegCreates; ! 1260: #ifdef clnpInOpts ! 1261: if (ot = text2obj ("clnpInOpts")) ! 1262: ot -> ot_getfnx = o_clnp, ! 1263: ot -> ot_info = (caddr_t) clnpInOpts; ! 1264: #endif ! 1265: #ifdef clnpOutOpts ! 1266: if (ot = text2obj ("clnpOutOpts")) ! 1267: ot -> ot_getfnx = o_clnp, ! 1268: ot -> ot_info = (caddr_t) clnpOutOpts; ! 1269: #endif ! 1270: ! 1271: if (ot = text2obj ("clnpAdEntAddr")) ! 1272: ot -> ot_getfnx = o_clnp_addr, ! 1273: ot -> ot_info = (caddr_t) clnpAdEntAddr; ! 1274: if (ot = text2obj ("clnpAdEntIfIndex")) ! 1275: ot -> ot_getfnx = o_clnp_addr, ! 1276: ot -> ot_info = (caddr_t) clnpAdEntIfIndex; ! 1277: if (ot = text2obj ("clnpAdEntNetMask")) ! 1278: ot -> ot_getfnx = o_clnp_addr, ! 1279: ot -> ot_info = (caddr_t) clnpAdEntNetMask; ! 1280: if (ot = text2obj ("clnpAdEntReasmMaxSize")) ! 1281: ot -> ot_getfnx = o_clnp_addr, ! 1282: ot -> ot_info = (caddr_t) clnpAdEntReasmMaxSize; ! 1283: ! 1284: if (ot = text2obj ("clnpRouteDest")) ! 1285: ot -> ot_getfnx = o_clnp_route, ! 1286: ot -> ot_info = (caddr_t) clnpRouteDest; ! 1287: if (ot = text2obj ("clnpRouteIfIndex")) ! 1288: ot -> ot_getfnx = o_clnp_route, ! 1289: ot -> ot_info = (caddr_t) clnpRouteIfIndex; ! 1290: if (ot = text2obj ("clnpRouteMetric1")) ! 1291: ot -> ot_getfnx = o_clnp_route, ! 1292: ot -> ot_info = (caddr_t) clnpRouteMetric1; ! 1293: if (ot = text2obj ("clnpRouteMetric2")) ! 1294: ot -> ot_getfnx = o_clnp_route, ! 1295: ot -> ot_info = (caddr_t) clnpRouteMetric2; ! 1296: if (ot = text2obj ("clnpRouteMetric3")) ! 1297: ot -> ot_getfnx = o_clnp_route, ! 1298: ot -> ot_info = (caddr_t) clnpRouteMetric3; ! 1299: if (ot = text2obj ("clnpRouteMetric4")) ! 1300: ot -> ot_getfnx = o_clnp_route, ! 1301: ot -> ot_info = (caddr_t) clnpRouteMetric4; ! 1302: if (ot = text2obj ("clnpRouteNextHop")) ! 1303: ot -> ot_getfnx = o_clnp_route, ! 1304: ot -> ot_info = (caddr_t) clnpRouteNextHop; ! 1305: if (ot = text2obj ("clnpRouteType")) ! 1306: ot -> ot_getfnx = o_clnp_route, ! 1307: ot -> ot_info = (caddr_t) clnpRouteType; ! 1308: if (ot = text2obj ("clnpRouteProto")) ! 1309: ot -> ot_getfnx = o_clnp_route, ! 1310: ot -> ot_info = (caddr_t) clnpRouteProto; ! 1311: if (ot = text2obj ("clnpRouteAge")) ! 1312: ot -> ot_getfnx = o_clnp_route, ! 1313: ot -> ot_info = (caddr_t) clnpRouteAge; ! 1314: ! 1315: if (ot = text2obj ("unixClnpRouteFlags")) ! 1316: ot -> ot_getfnx = o_clnp_route, ! 1317: ot -> ot_info = (caddr_t) unixClnpRouteFlags; ! 1318: if (ot = text2obj ("unixClnpRouteRefCnt")) ! 1319: ot -> ot_getfnx = o_clnp_route, ! 1320: ot -> ot_info = (caddr_t) unixClnpRouteRefCnt; ! 1321: if (ot = text2obj ("unixClnpRouteUses")) ! 1322: ot -> ot_getfnx = o_clnp_route, ! 1323: ot -> ot_info = (caddr_t) unixClnpRouteUses; ! 1324: ! 1325: if (ot = text2obj ("clnpNetToMediaIfIndex")) ! 1326: ot -> ot_getfnx = o_address, ! 1327: ot -> ot_info = (caddr_t) clnpNetToMediaIfIndex; ! 1328: if (ot = text2obj ("clnpNetToMediaPhysAddress")) ! 1329: ot -> ot_getfnx = o_address, ! 1330: ot -> ot_info = (caddr_t) clnpNetToMediaPhysAddress; ! 1331: if (ot = text2obj ("clnpNetToMediaNetAddress")) ! 1332: ot -> ot_getfnx = o_address, ! 1333: ot -> ot_info = (caddr_t) clnpNetToMediaNetAddress; ! 1334: if (ot = text2obj ("clnpNetToMediaType")) ! 1335: ot -> ot_getfnx = o_address, ! 1336: ot -> ot_info = (caddr_t) clnpNetToMediaType; ! 1337: #ifdef clnpNetToMediaAge ! 1338: if (ot = text2obj ("clnpNetToMediaAge")) ! 1339: ot -> ot_getfnx = o_address, ! 1340: ot -> ot_info = (caddr_t) clnpNetToMediaAge; ! 1341: #endif ! 1342: #ifdef clnpNetToMediaHoldTime ! 1343: if (ot = text2obj ("clnpNetToMediaHoldTime")) ! 1344: ot -> ot_getfnx = o_address, ! 1345: ot -> ot_info = (caddr_t) clnpNetToMediaHoldTime; ! 1346: #endif ! 1347: if (ot = text2obj ("clnpMediaToNetIfIndex")) ! 1348: ot -> ot_getfnx = o_address, ! 1349: ot -> ot_info = (caddr_t) clnpMediaToNetIfIndex; ! 1350: if (ot = text2obj ("clnpMediaToNetNetAddress")) ! 1351: ot -> ot_getfnx = o_address, ! 1352: ot -> ot_info = (caddr_t) clnpMediaToNetNetAddress; ! 1353: if (ot = text2obj ("clnpMediaToNetPhysAddress")) ! 1354: ot -> ot_getfnx = o_address, ! 1355: ot -> ot_info = (caddr_t) clnpMediaToNetPhysAddress; ! 1356: if (ot = text2obj ("clnpMediaToNetType")) ! 1357: ot -> ot_getfnx = o_address, ! 1358: ot -> ot_info = (caddr_t) clnpMediaToNetType; ! 1359: #ifdef clnpMediaToNetAge ! 1360: if (ot = text2obj ("clnpMediaToNetAge")) ! 1361: ot -> ot_getfnx = o_address, ! 1362: ot -> ot_info = (caddr_t) clnpMediaToNetAge; ! 1363: #endif ! 1364: #ifdef clnpMediaToNetHoldTime ! 1365: if (ot = text2obj ("clnpMediaToNetHoldTime")) ! 1366: ot -> ot_getfnx = o_address, ! 1367: ot -> ot_info = (caddr_t) clnpMediaToNetHoldTime; ! 1368: #endif ! 1369: ! 1370: if (ot = text2obj ("clnpInErrors")) ! 1371: ot -> ot_getfnx = o_clnp, ! 1372: ot -> ot_info = (caddr_t) clnpInErrors; ! 1373: if (ot = text2obj ("clnpOutErrors")) ! 1374: ot -> ot_getfnx = o_clnp, ! 1375: ot -> ot_info = (caddr_t) clnpOutErrors; ! 1376: if (ot = text2obj ("clnpInErrUnspecs")) ! 1377: ot -> ot_getfnx = o_clnp, ! 1378: ot -> ot_info = (caddr_t) clnpInErrUnspecs; ! 1379: if (ot = text2obj ("clnpInErrProcs")) ! 1380: ot -> ot_getfnx = o_clnp, ! 1381: ot -> ot_info = (caddr_t) clnpInErrProcs; ! 1382: if (ot = text2obj ("clnpInErrCksums")) ! 1383: ot -> ot_getfnx = o_clnp, ! 1384: ot -> ot_info = (caddr_t) clnpInErrCksums; ! 1385: if (ot = text2obj ("clnpInErrCongests")) ! 1386: ot -> ot_getfnx = o_clnp, ! 1387: ot -> ot_info = (caddr_t) clnpInErrCongests; ! 1388: if (ot = text2obj ("clnpInErrHdrs")) ! 1389: ot -> ot_getfnx = o_clnp, ! 1390: ot -> ot_info = (caddr_t) clnpInErrHdrs; ! 1391: if (ot = text2obj ("clnpInErrSegs")) ! 1392: ot -> ot_getfnx = o_clnp, ! 1393: ot -> ot_info = (caddr_t) clnpInErrSegs; ! 1394: if (ot = text2obj ("clnpInErrIncomps")) ! 1395: ot -> ot_getfnx = o_clnp, ! 1396: ot -> ot_info = (caddr_t) clnpInErrIncomps; ! 1397: if (ot = text2obj ("clnpInErrDups")) ! 1398: ot -> ot_getfnx = o_clnp, ! 1399: ot -> ot_info = (caddr_t) clnpInErrDups; ! 1400: if (ot = text2obj ("clnpInErrUnreachDsts")) ! 1401: ot -> ot_getfnx = o_clnp, ! 1402: ot -> ot_info = (caddr_t) clnpInErrUnreachDsts; ! 1403: if (ot = text2obj ("clnpInErrUnknownDsts")) ! 1404: ot -> ot_getfnx = o_clnp, ! 1405: ot -> ot_info = (caddr_t) clnpInErrUnknownDsts; ! 1406: if (ot = text2obj ("clnpInErrSRUnspecs")) ! 1407: ot -> ot_getfnx = o_clnp, ! 1408: ot -> ot_info = (caddr_t) clnpInErrSRUnspecs; ! 1409: if (ot = text2obj ("clnpInErrSRSyntaxes")) ! 1410: ot -> ot_getfnx = o_clnp, ! 1411: ot -> ot_info = (caddr_t) clnpInErrSRSyntaxes; ! 1412: if (ot = text2obj ("clnpInErrSRUnkAddrs")) ! 1413: ot -> ot_getfnx = o_clnp, ! 1414: ot -> ot_info = (caddr_t) clnpInErrSRUnkAddrs; ! 1415: if (ot = text2obj ("clnpInErrSRBadPaths")) ! 1416: ot -> ot_getfnx = o_clnp, ! 1417: ot -> ot_info = (caddr_t) clnpInErrSRBadPaths; ! 1418: if (ot = text2obj ("clnpInErrHops")) ! 1419: ot -> ot_getfnx = o_clnp, ! 1420: ot -> ot_info = (caddr_t) clnpInErrHops; ! 1421: if (ot = text2obj ("clnpInErrHopReassms")) ! 1422: ot -> ot_getfnx = o_clnp, ! 1423: ot -> ot_info = (caddr_t) clnpInErrHopReassms; ! 1424: if (ot = text2obj ("clnpInErrUnsOptions")) ! 1425: ot -> ot_getfnx = o_clnp, ! 1426: ot -> ot_info = (caddr_t) clnpInErrUnsOptions; ! 1427: if (ot = text2obj ("clnpInErrUnsVersions")) ! 1428: ot -> ot_getfnx = o_clnp, ! 1429: ot -> ot_info = (caddr_t) clnpInErrUnsVersions; ! 1430: if (ot = text2obj ("clnpInErrUnsSecurities")) ! 1431: ot -> ot_getfnx = o_clnp, ! 1432: ot -> ot_info = (caddr_t) clnpInErrUnsSecurities; ! 1433: if (ot = text2obj ("clnpInErrUnsSRs")) ! 1434: ot -> ot_getfnx = o_clnp, ! 1435: ot -> ot_info = (caddr_t) clnpInErrUnsSRs; ! 1436: if (ot = text2obj ("clnpInErrUnsRRs")) ! 1437: ot -> ot_getfnx = o_clnp, ! 1438: ot -> ot_info = (caddr_t) clnpInErrUnsRRs; ! 1439: if (ot = text2obj ("clnpInErrInterferences")) ! 1440: ot -> ot_getfnx = o_clnp, ! 1441: ot -> ot_info = (caddr_t) clnpInErrInterferences; ! 1442: if (ot = text2obj ("clnpOutErrUnspecs")) ! 1443: ot -> ot_getfnx = o_clnp, ! 1444: ot -> ot_info = (caddr_t) clnpOutErrUnspecs; ! 1445: if (ot = text2obj ("clnpOutErrProcs")) ! 1446: ot -> ot_getfnx = o_clnp, ! 1447: ot -> ot_info = (caddr_t) clnpOutErrProcs; ! 1448: if (ot = text2obj ("clnpOutErrCksums")) ! 1449: ot -> ot_getfnx = o_clnp, ! 1450: ot -> ot_info = (caddr_t) clnpOutErrCksums; ! 1451: if (ot = text2obj ("clnpOutErrCongests")) ! 1452: ot -> ot_getfnx = o_clnp, ! 1453: ot -> ot_info = (caddr_t) clnpOutErrCongests; ! 1454: if (ot = text2obj ("clnpOutErrHdrs")) ! 1455: ot -> ot_getfnx = o_clnp, ! 1456: ot -> ot_info = (caddr_t) clnpOutErrHdrs; ! 1457: if (ot = text2obj ("clnpOutErrSegs")) ! 1458: ot -> ot_getfnx = o_clnp, ! 1459: ot -> ot_info = (caddr_t) clnpOutErrSegs; ! 1460: if (ot = text2obj ("clnpOutErrIncomps")) ! 1461: ot -> ot_getfnx = o_clnp, ! 1462: ot -> ot_info = (caddr_t) clnpOutErrIncomps; ! 1463: if (ot = text2obj ("clnpOutErrDups")) ! 1464: ot -> ot_getfnx = o_clnp, ! 1465: ot -> ot_info = (caddr_t) clnpOutErrDups; ! 1466: if (ot = text2obj ("clnpOutErrUnreachDsts")) ! 1467: ot -> ot_getfnx = o_clnp, ! 1468: ot -> ot_info = (caddr_t) clnpOutErrUnreachDsts; ! 1469: if (ot = text2obj ("clnpOutErrUnknownDsts")) ! 1470: ot -> ot_getfnx = o_clnp, ! 1471: ot -> ot_info = (caddr_t) clnpOutErrUnknownDsts; ! 1472: if (ot = text2obj ("clnpOutErrSRUnspecs")) ! 1473: ot -> ot_getfnx = o_clnp, ! 1474: ot -> ot_info = (caddr_t) clnpOutErrSRUnspecs; ! 1475: if (ot = text2obj ("clnpOutErrSRSyntaxes")) ! 1476: ot -> ot_getfnx = o_clnp, ! 1477: ot -> ot_info = (caddr_t) clnpOutErrSRSyntaxes; ! 1478: if (ot = text2obj ("clnpOutErrSRUnkAddrs")) ! 1479: ot -> ot_getfnx = o_clnp, ! 1480: ot -> ot_info = (caddr_t) clnpOutErrSRUnkAddrs; ! 1481: if (ot = text2obj ("clnpOutErrSRBadPaths")) ! 1482: ot -> ot_getfnx = o_clnp, ! 1483: ot -> ot_info = (caddr_t) clnpOutErrSRBadPaths; ! 1484: if (ot = text2obj ("clnpOutErrHops")) ! 1485: ot -> ot_getfnx = o_clnp, ! 1486: ot -> ot_info = (caddr_t) clnpOutErrHops; ! 1487: if (ot = text2obj ("clnpOutErrHopReassms")) ! 1488: ot -> ot_getfnx = o_clnp, ! 1489: ot -> ot_info = (caddr_t) clnpOutErrHopReassms; ! 1490: if (ot = text2obj ("clnpOutErrUnsOptions")) ! 1491: ot -> ot_getfnx = o_clnp, ! 1492: ot -> ot_info = (caddr_t) clnpOutErrUnsOptions; ! 1493: if (ot = text2obj ("clnpOutErrUnsVersions")) ! 1494: ot -> ot_getfnx = o_clnp, ! 1495: ot -> ot_info = (caddr_t) clnpOutErrUnsVersions; ! 1496: if (ot = text2obj ("clnpOutErrUnsSecurities")) ! 1497: ot -> ot_getfnx = o_clnp, ! 1498: ot -> ot_info = (caddr_t) clnpOutErrUnsSecurities; ! 1499: if (ot = text2obj ("clnpOutErrUnsSRs")) ! 1500: ot -> ot_getfnx = o_clnp, ! 1501: ot -> ot_info = (caddr_t) clnpOutErrUnsSRs; ! 1502: if (ot = text2obj ("clnpOutErrUnsRRs")) ! 1503: ot -> ot_getfnx = o_clnp, ! 1504: ot -> ot_info = (caddr_t) clnpOutErrUnsRRs; ! 1505: if (ot = text2obj ("clnpOutErrInterferences")) ! 1506: ot -> ot_getfnx = o_clnp, ! 1507: ot -> ot_info = (caddr_t) clnpOutErrInterferences; ! 1508: ! 1509: if (ot = text2obj ("esisESHins")) ! 1510: ot -> ot_getfnx = o_esis, ! 1511: ot -> ot_info = (caddr_t) esisESHins; ! 1512: if (ot = text2obj ("esisESHouts")) ! 1513: ot -> ot_getfnx = o_esis, ! 1514: ot -> ot_info = (caddr_t) esisESHouts; ! 1515: if (ot = text2obj ("esisISHins")) ! 1516: ot -> ot_getfnx = o_esis, ! 1517: ot -> ot_info = (caddr_t) esisISHins; ! 1518: if (ot = text2obj ("esisISHouts")) ! 1519: ot -> ot_getfnx = o_esis, ! 1520: ot -> ot_info = (caddr_t) esisISHouts; ! 1521: if (ot = text2obj ("esisRDUins")) ! 1522: ot -> ot_getfnx = o_esis, ! 1523: ot -> ot_info = (caddr_t) esisRDUins; ! 1524: if (ot = text2obj ("esisRDUouts")) ! 1525: ot -> ot_getfnx = o_esis, ! 1526: ot -> ot_info = (caddr_t) esisRDUouts; ! 1527: } ! 1528: #else ! 1529: ! 1530: init_clnp () {} ! 1531: ! 1532: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.