Annotation of embedaddon/libpdel/ppp/ppp_l2tp_avp.h, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:  * Copyright (c) 2001-2002 Packet Design, LLC.
        !             4:  * All rights reserved.
        !             5:  * 
        !             6:  * Subject to the following obligations and disclaimer of warranty,
        !             7:  * use and redistribution of this software, in source or object code
        !             8:  * forms, with or without modifications are expressly permitted by
        !             9:  * Packet Design; provided, however, that:
        !            10:  * 
        !            11:  *    (i)  Any and all reproductions of the source or object code
        !            12:  *         must include the copyright notice above and the following
        !            13:  *         disclaimer of warranties; and
        !            14:  *    (ii) No rights are granted, in any manner or form, to use
        !            15:  *         Packet Design trademarks, including the mark "PACKET DESIGN"
        !            16:  *         on advertising, endorsements, or otherwise except as such
        !            17:  *         appears in the above copyright notice or in the software.
        !            18:  * 
        !            19:  * THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
        !            20:  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
        !            21:  * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
        !            22:  * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
        !            23:  * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
        !            24:  * OR NON-INFRINGEMENT.  PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
        !            25:  * OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
        !            26:  * OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
        !            27:  * RELIABILITY OR OTHERWISE.  IN NO EVENT SHALL PACKET DESIGN BE
        !            28:  * LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
        !            29:  * OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
        !            30:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
        !            31:  * DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
        !            32:  * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
        !            33:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            34:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
        !            35:  * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
        !            36:  * THE POSSIBILITY OF SUCH DAMAGE.
        !            37:  *
        !            38:  * Author: Archie Cobbs <archie@freebsd.org>
        !            39:  */
        !            40: 
        !            41: #ifndef _PPP_L2TP_PDEL_PPP_PPP_L2TP_AVP_H_
        !            42: #define _PPP_L2TP_PDEL_PPP_PPP_L2TP_AVP_H_
        !            43: 
        !            44: /***********************************************************************
        !            45:                        AVP STRUCTURE DEFINITIONS
        !            46: ***********************************************************************/
        !            47: 
        !            48: /* Constants defined in RFC 2661 */
        !            49: #define L2TP_PROTO_VERS                1
        !            50: #define L2TP_PROTO_REV         0
        !            51: #define L2TP_DEFAULT_PEER_WIN  4
        !            52: #define L2TP_BEARER_DIGITAL    0x00000001
        !            53: #define L2TP_BEARER_ANALOG     0x00000002
        !            54: #define L2TP_FRAMING_SYNC      0x00000001
        !            55: #define L2TP_FRAMING_ASYNC     0x00000002
        !            56: 
        !            57: #define AVP_MANDATORY          0x8000
        !            58: #define AVP_HIDDEN             0x4000
        !            59: #define AVP_RESERVED           0x3c00
        !            60: #define AVP_LENGTH_MASK                0x03ff
        !            61: #define AVP_MAX_LENGTH         1023
        !            62: #define AVP_MAX_VLEN           (AVP_MAX_LENGTH - 6)
        !            63: 
        !            64: struct ppp_l2tp_avp_info;
        !            65: struct ppp_l2tp_avp;
        !            66: 
        !            67: /* AVP decoder function type */
        !            68: typedef void   ppp_l2tp_avp_decode_t(const struct ppp_l2tp_avp_info *info,
        !            69:                        const struct ppp_l2tp_avp *avp, char *buf, size_t bmax);
        !            70: 
        !            71: /* Structure describing one AVP type */
        !            72: struct ppp_l2tp_avp_info {
        !            73:        const char              *name;          /* textual name */
        !            74:        ppp_l2tp_avp_decode_t   *decode;        /* decode contents */
        !            75:        u_int16_t               vendor;         /* vendor id */
        !            76:        u_int16_t               type;           /* attribute type */
        !            77:        u_char                  hidden_ok;      /* avp allowed to be hidden */
        !            78:        u_char                  mandatory;      /* set mandatory bit (xmit) */
        !            79:        u_int16_t               min_length;     /* minimum length of value */
        !            80:        u_int16_t               max_length;     /* maximum length of value */
        !            81: };
        !            82: 
        !            83: /* Structure describing one AVP */
        !            84: struct ppp_l2tp_avp {
        !            85:        u_char                  mandatory;      /* mandatory bit */
        !            86:        u_int16_t               vendor;         /* vendor id */
        !            87:        u_int16_t               type;           /* attribute type */
        !            88:        u_int16_t               vlen;           /* length of attribute value */
        !            89:        void                    *value;         /* attribute value */
        !            90: };
        !            91: 
        !            92: /* Structure describing a list of AVP's */
        !            93: struct ppp_l2tp_avp_list {
        !            94:        u_int                   length;         /* length of list */
        !            95:        struct ppp_l2tp_avp     *avps;          /* array of avps in list */
        !            96: };
        !            97: 
        !            98: /* Individual AVP structures */
        !            99: struct messagetype_avp {
        !           100:        u_int16_t       mesgtype;
        !           101: };
        !           102: 
        !           103: struct codesresulterror_avp {
        !           104:        u_int16_t       result;
        !           105:        u_int16_t       error;
        !           106:        char            errmsg[0];
        !           107: };
        !           108: 
        !           109: struct protoversion_avp {
        !           110:        u_int8_t        version;
        !           111:        u_int8_t        revision;
        !           112: };
        !           113: 
        !           114: struct framecap_avp {
        !           115:        u_char          async;
        !           116:        u_char          sync;
        !           117: };
        !           118: 
        !           119: struct bearercap_avp {
        !           120:        u_char          analog;
        !           121:        u_char          digital;
        !           122: };
        !           123: 
        !           124: struct tiebreaker_avp {
        !           125:        u_char          value[8];
        !           126: };
        !           127: 
        !           128: struct firmware_avp {
        !           129:        u_int16_t       revision;
        !           130: };
        !           131: 
        !           132: struct hostname_avp {
        !           133:        char            hostname[0];
        !           134: };
        !           135: 
        !           136: struct vendorname_avp {
        !           137:        char            vendorname[0];
        !           138: };
        !           139: 
        !           140: struct tunnelid_avp {
        !           141:        u_int16_t       id;
        !           142: };
        !           143: 
        !           144: struct sessionid_avp {
        !           145:        u_int16_t       id;
        !           146: };
        !           147: 
        !           148: struct windowsize_avp {
        !           149:        u_int16_t       size;
        !           150: };
        !           151: 
        !           152: struct challenge_avp {
        !           153:        u_int           length;
        !           154:        u_char          value[0];
        !           155: };
        !           156: 
        !           157: struct challengeresp_avp {
        !           158:        u_char          value[16];
        !           159: };
        !           160: 
        !           161: struct causecode_avp {
        !           162:        u_int16_t       causecode;
        !           163:        u_int8_t        causemsg;
        !           164:        char            message[0];
        !           165: };
        !           166: 
        !           167: struct serialnum_avp {
        !           168:        u_int32_t       serialnum;
        !           169: };
        !           170: 
        !           171: struct minbps_avp {
        !           172:        u_int32_t       minbps;
        !           173: };
        !           174: 
        !           175: struct maxbps_avp {
        !           176:        u_int32_t       maxbps;
        !           177: };
        !           178: 
        !           179: struct bearer_avp {
        !           180:        u_char          analog;
        !           181:        u_char          digital;
        !           182: };
        !           183: 
        !           184: struct framing_avp {
        !           185:        u_char          async;
        !           186:        u_char          sync;
        !           187: };
        !           188: 
        !           189: struct callednum_avp {
        !           190:        char            number[0];
        !           191: };
        !           192: 
        !           193: struct callingnum_avp {
        !           194:        char            number[0];
        !           195: };
        !           196: 
        !           197: struct subaddress_avp {
        !           198:        char            number[0];
        !           199: };
        !           200: 
        !           201: struct txconnect_avp {
        !           202:        u_int32_t       bps;
        !           203: };
        !           204: 
        !           205: struct rxconnect_avp {
        !           206:        u_int32_t       bps;
        !           207: };
        !           208: 
        !           209: struct channelid_avp {
        !           210:        u_int32_t       channel;
        !           211: };
        !           212: 
        !           213: struct groupid_avp {
        !           214:        u_int           length;
        !           215:        u_char          data[0];
        !           216: };
        !           217: 
        !           218: struct recvlcp_avp {
        !           219:        u_int           length;
        !           220:        u_char          data[0];
        !           221: };
        !           222: 
        !           223: struct lastsentlcp_avp {
        !           224:        u_int           length;
        !           225:        u_char          data[0];
        !           226: };
        !           227: 
        !           228: struct lastrecvlcp_avp {
        !           229:        u_int           length;
        !           230:        u_char          data[0];
        !           231: };
        !           232: 
        !           233: struct proxyauth_avp {
        !           234:        u_int16_t       type;
        !           235: };
        !           236: 
        !           237: struct proxyname_avp {
        !           238:        u_int           length;
        !           239:        u_char          data[0];
        !           240: };
        !           241: 
        !           242: struct proxychallenge_avp {
        !           243:        u_int           length;
        !           244:        u_char          data[0];
        !           245: };
        !           246: 
        !           247: struct proxyid_avp {
        !           248:        u_int16_t       id;
        !           249: };
        !           250: 
        !           251: struct proxyresp_avp {
        !           252:        u_int           length;
        !           253:        u_char          data[0];
        !           254: };
        !           255: 
        !           256: struct callerror_avp {
        !           257:        u_int32_t       crc;
        !           258:        u_int32_t       frame;
        !           259:        u_int32_t       overrun;
        !           260:        u_int32_t       buffer;
        !           261:        u_int32_t       timeout;
        !           262:        u_int32_t       alignment;
        !           263: };
        !           264: 
        !           265: struct accm_avp {
        !           266:        u_int32_t       xmit;
        !           267:        u_int32_t       recv;
        !           268: };
        !           269: 
        !           270: struct seqrequired_avp {
        !           271: };
        !           272: 
        !           273: /*
        !           274:  * This structure describes a suite of AVPs in host-friendly format.
        !           275:  * Typically only a sub-set of the AVPs listed will be used.
        !           276:  */
        !           277: struct ppp_l2tp_avp_ptrs {
        !           278:        struct messagetype_avp          *message;
        !           279:        struct codesresulterror_avp     *errresultcode;
        !           280:        struct protoversion_avp         *protocol;
        !           281:        struct framecap_avp             *framingcap;
        !           282:        struct bearercap_avp            *bearercap;
        !           283:        struct tiebreaker_avp           *tiebreaker;
        !           284:        struct firmware_avp             *firmware;
        !           285:        struct hostname_avp             *hostname;
        !           286:        struct vendorname_avp           *vendor;
        !           287:        struct tunnelid_avp             *tunnelid;
        !           288:        struct sessionid_avp            *sessionid;
        !           289:        struct windowsize_avp           *winsize;
        !           290:        struct challenge_avp            *challenge;
        !           291:        struct challengeresp_avp        *challengresp;
        !           292:        struct causecode_avp            *causecode;
        !           293:        struct serialnum_avp            *serialnum;
        !           294:        struct minbps_avp               *minbps;
        !           295:        struct maxbps_avp               *maxbps;
        !           296:        struct bearer_avp               *bearer;
        !           297:        struct framing_avp              *framing;
        !           298:        struct callednum_avp            *callednum;
        !           299:        struct callingnum_avp           *callingnum;
        !           300:        struct subaddress_avp           *subaddress;
        !           301:        struct txconnect_avp            *txconnect;
        !           302:        struct rxconnect_avp            *rxconnect;
        !           303:        struct channelid_avp            *channelid;
        !           304:        struct groupid_avp              *groupid;
        !           305:        struct recvlcp_avp              *recvlcp;
        !           306:        struct lastsentlcp_avp          *lastsendlcp;
        !           307:        struct lastrecvlcp_avp          *lastrecvlcp;
        !           308:        struct proxyauth_avp            *proxyauth;
        !           309:        struct proxyname_avp            *proxyname;
        !           310:        struct proxychallenge_avp       *proxychallenge;
        !           311:        struct proxyid_avp              *proxyid;
        !           312:        struct proxyresp_avp            *proxyres;
        !           313:        struct callerror_avp            *callerror;
        !           314:        struct accm_avp                 *accm;
        !           315:        struct seqrequired_avp          *seqrequired;
        !           316: };
        !           317: 
        !           318: /* L2TP result codes for StopCCN messages */
        !           319: #define L2TP_RESULT_CLEARED    1       /* general reqst. to clear connection */
        !           320: #define L2TP_RESULT_ERROR      2       /* general error: see error code */
        !           321: #define L2TP_RESULT_DUP_CTRL   3       /* dupliate control channel */
        !           322: #define L2TP_RESULT_NOT_AUTH   4       /* control channel not authorized */
        !           323: #define L2TP_RESULT_PROTO_VERS 5       /* unsupported protocol: max=err code */
        !           324: #define L2TP_RESULT_SHUTDOWN   6       /* being shut down */
        !           325: #define L2TP_RESULT_FSM                7       /* fsm error */
        !           326: 
        !           327: /* L2TP result codes for CDN messages */
        !           328: #define L2TP_RESULT_DRP_CARRIER        1       /* lost carrier */
        !           329: #define L2TP_RESULT_ERROR      2       /* general error: see error code */
        !           330: #define L2TP_RESULT_ADMIN      3       /* administrative disconnect */
        !           331: #define L2TP_RESULT_AVAIL_TEMP 4       /* temp. lack of available resources */
        !           332: #define L2TP_RESULT_AVAIL_PERM 5       /* perm. lack of available resources */
        !           333: #define L2TP_RESULT_DEST       6       /* invalid destination */
        !           334: #define L2TP_RESULT_NO_CARRIER 7       /* no carrier detected */
        !           335: #define L2TP_RESULT_BUSY       8       /* busy signal */
        !           336: #define L2TP_RESULT_NO_DIALTONE        9       /* no dial tone */
        !           337: #define L2TP_RESULT_TIMEOUT    10      /* timeout during establishment */
        !           338: #define L2TP_RESULT_NO_FRAMING 11      /* no appropriate framing detected */
        !           339: 
        !           340: /* L2TP error codes */
        !           341: #define L2TP_ERROR_NO_CTRL     1       /* no control connection exists */
        !           342: #define L2TP_ERROR_LENGTH      2       /* length is wrong */
        !           343: #define L2TP_ERROR_BAD_VALUE   3       /* invalid or field non-zero resv. */
        !           344: #define L2TP_ERROR_RESOURCES   4       /* insufficient resources */
        !           345: #define L2TP_ERROR_INVALID_ID  5       /* invalid session id */
        !           346: #define L2TP_ERROR_GENERIC     6       /* generic vendor-specific error */
        !           347: #define L2TP_ERROR_TRY_ANOTHER 7       /* try another lns */
        !           348: #define L2TP_ERROR_MANDATORY   8       /* rec'd unknown mandatory avp */
        !           349: 
        !           350: /***********************************************************************
        !           351:                        AVP TYPES
        !           352: ***********************************************************************/
        !           353: 
        !           354: enum ppp_l2tp_avp_type {
        !           355:        AVP_MESSAGE_TYPE                =0,
        !           356:        AVP_RESULT_CODE                 =1,
        !           357:        AVP_PROTOCOL_VERSION            =2,
        !           358:        AVP_FRAMING_CAPABILITIES        =3,
        !           359:        AVP_BEARER_CAPABILITIES         =4,
        !           360:        AVP_TIE_BREAKER                 =5,
        !           361:        AVP_FIRMWARE_REVISION           =6,
        !           362:        AVP_HOST_NAME                   =7,
        !           363:        AVP_VENDOR_NAME                 =8,
        !           364:        AVP_ASSIGNED_TUNNEL_ID          =9,
        !           365:        AVP_RECEIVE_WINDOW_SIZE         =10,
        !           366:        AVP_CHALLENGE                   =11,
        !           367:        AVP_CAUSE_CODE                  =12,
        !           368:        AVP_CHALLENGE_RESPONSE          =13,
        !           369:        AVP_ASSIGNED_SESSION_ID         =14,
        !           370:        AVP_CALL_SERIAL_NUMBER          =15,
        !           371:        AVP_MINIMUM_BPS                 =16,
        !           372:        AVP_MAXIMUM_BPS                 =17,
        !           373:        AVP_BEARER_TYPE                 =18,
        !           374:        AVP_FRAMING_TYPE                =19,
        !           375:        AVP_CALLED_NUMBER               =21,
        !           376:        AVP_CALLING_NUMBER              =22,
        !           377:        AVP_SUB_ADDRESS                 =23,
        !           378:        AVP_TX_CONNECT_SPEED            =24,
        !           379:        AVP_PHYSICAL_CHANNEL_ID         =25,
        !           380:        AVP_INITIAL_RECV_CONFREQ        =26,
        !           381:        AVP_LAST_SENT_CONFREQ           =27,
        !           382:        AVP_LAST_RECV_CONFREQ           =28,
        !           383:        AVP_PROXY_AUTHEN_TYPE           =29,
        !           384:        AVP_PROXY_AUTHEN_NAME           =30,
        !           385:        AVP_PROXY_AUTHEN_CHALLENGE      =31,
        !           386:        AVP_PROXY_AUTHEN_ID             =32,
        !           387:        AVP_PROXY_AUTHEN_RESPONSE       =33,
        !           388:        AVP_CALL_ERRORS                 =34,
        !           389:        AVP_ACCM                        =35,
        !           390:        AVP_RANDOM_VECTOR               =36,
        !           391:        AVP_PRIVATE_GROUP_ID            =37,
        !           392:        AVP_RX_CONNECT_SPEED            =38,
        !           393:        AVP_SEQUENCING_REQUIRED         =39,
        !           394:        AVP_MAX                         =40,
        !           395: };
        !           396: 
        !           397: /***********************************************************************
        !           398:                        AVP FUNCTIONS
        !           399: ***********************************************************************/
        !           400: 
        !           401: __BEGIN_DECLS
        !           402: 
        !           403: /*
        !           404:  * Create an AVP pointers structure from an AVP list.
        !           405:  *
        !           406:  * AVP's not listed in the pointers structure are simply omitted.
        !           407:  *
        !           408:  * Returns:
        !           409:  *     NULL    If failure (errno is set)
        !           410:  *     ptrs    New pointers structure
        !           411:  */
        !           412: extern struct  ppp_l2tp_avp_ptrs *ppp_l2tp_avp_list2ptrs(
        !           413:                        const struct ppp_l2tp_avp_list *list);
        !           414: 
        !           415: /*
        !           416:  * Destroy an AVP pointers structure.
        !           417:  *
        !           418:  * Arguments:
        !           419:  *     ptrsp   Pointer to 'AVP pointers' pointer; it gets set to NULL
        !           420:  */
        !           421: extern void    ppp_l2tp_avp_ptrs_destroy(struct ppp_l2tp_avp_ptrs **ptrsp);
        !           422: 
        !           423: /*
        !           424:  * Create a new AVP structure.
        !           425:  *
        !           426:  * Arguments:
        !           427:  *     mandatory Set mandatory bit
        !           428:  *     vendor  Attribute vendor
        !           429:  *     type    Attribute type
        !           430:  *     value   Value contents
        !           431:  *     vlen    Length of value contents
        !           432:  *
        !           433:  * Returns:
        !           434:  *     NULL    If failure (errno is set)
        !           435:  *     avp     New AVP structure
        !           436:  */
        !           437: extern struct  ppp_l2tp_avp *ppp_l2tp_avp_create(int mandatory,
        !           438:                        u_int16_t vendor, u_int16_t type, const void *value,
        !           439:                        size_t vlen);
        !           440: 
        !           441: /*
        !           442:  * Copy an AVP struture.
        !           443:  *
        !           444:  * Returns:
        !           445:  *     NULL    If failure (errno is set)
        !           446:  *     ptr     New AVP structure
        !           447:  */
        !           448: extern struct  ppp_l2tp_avp *ppp_l2tp_avp_copy(const struct ppp_l2tp_avp *avp);
        !           449: 
        !           450: /*
        !           451:  * Destroy an AVP structure.
        !           452:  *
        !           453:  * Arguments:
        !           454:  *     avpp    Pointer to AVP pointer; it gets set to NULL
        !           455:  */
        !           456: extern void    ppp_l2tp_avp_destroy(struct ppp_l2tp_avp **avpp);
        !           457: 
        !           458: /*
        !           459:  * Create a new AVP list.
        !           460:  *
        !           461:  * Returns:
        !           462:  *     NULL    If failure (errno is set)
        !           463:  *     ptr     New AVP list structure
        !           464:  */
        !           465: extern struct  ppp_l2tp_avp_list *ppp_l2tp_avp_list_create(void);
        !           466: 
        !           467: /*
        !           468:  * Insert an AVP into a list.
        !           469:  *
        !           470:  * Arguments:
        !           471:  *     list    List to insert AVP into
        !           472:  *     avpp    Pointer to AVP pointer; it gets set to NULL if successful
        !           473:  *     index   Where in list to insert; special case -1 means 'at the end'
        !           474:  *
        !           475:  * Returns:
        !           476:  *      0      Successful
        !           477:  *     -1      If failure (errno is set)
        !           478:  */
        !           479: extern int     ppp_l2tp_avp_list_insert(struct ppp_l2tp_avp_list *list,
        !           480:                        struct ppp_l2tp_avp **avpp, int index);
        !           481: 
        !           482: /*
        !           483:  * Create a new AVP and add it to the end of the given list. That is, this
        !           484:  * ia a combination of ppp_l2tp_avp_create() and ppp_l2tp_avp_list_insert()
        !           485:  * added for convenience in a common operation.
        !           486:  *
        !           487:  * Arguments:
        !           488:  *     list    List to append AVP to
        !           489:  *     mandatory Set mandatory bit
        !           490:  *     vendor  Attribute vendor
        !           491:  *     type    Attribute type
        !           492:  *     value   Value contents
        !           493:  *     vlen    Length of value contents
        !           494:  *
        !           495:  * Returns:
        !           496:  *      0      Successful
        !           497:  *     -1      If failure (errno is set)
        !           498:  */
        !           499: extern int     ppp_l2tp_avp_list_append(struct ppp_l2tp_avp_list *list,
        !           500:                    int mandatory, u_int16_t vendor, u_int16_t type,
        !           501:                    const void *value, size_t vlen);
        !           502: 
        !           503: /*
        !           504:  * Extract an AVP from a list.
        !           505:  *
        !           506:  * Arguments:
        !           507:  *     list    List to extract AVP from
        !           508:  *     index   Which item to extract
        !           509:  *
        !           510:  * Returns:
        !           511:  *     avp     If 'index' is valid, extracted item
        !           512:  *     NULL    If 'index' is out of range
        !           513:  */
        !           514: extern struct  ppp_l2tp_avp *ppp_l2tp_avp_list_extract(
        !           515:                        struct ppp_l2tp_avp_list *list, u_int index);
        !           516: 
        !           517: /*
        !           518:  * Remove and destroy an AVP from a list.
        !           519:  *
        !           520:  * Arguments:
        !           521:  *     list    List to remove AVP from
        !           522:  *     index   Which item to remove
        !           523:  *
        !           524:  * Returns:
        !           525:  *      0      If 'index' is valid and AVP was removed
        !           526:  *     -1      If 'index' is out of range
        !           527:  */
        !           528: extern int     ppp_l2tp_avp_list_remove(
        !           529:                        struct ppp_l2tp_avp_list *list, u_int index);
        !           530: 
        !           531: /*
        !           532:  * Find an AVP in a list.
        !           533:  *
        !           534:  * Arguments:
        !           535:  *     list    List of AVP's
        !           536:  *     vendor  AVP vendor
        !           537:  *     type    AVP attribute type
        !           538:  *
        !           539:  * Returns:
        !           540:  *     index   If found, index of AVP in list
        !           541:  *     -1      If not found.
        !           542:  */
        !           543: extern int     ppp_l2tp_avp_list_find(const struct ppp_l2tp_avp_list *list,
        !           544:                        u_int16_t vendor, u_int16_t type);
        !           545: 
        !           546: /*
        !           547:  * Copy an AVP list.
        !           548:  *
        !           549:  * Returns:
        !           550:  *     NULL    If failure (errno is set)
        !           551:  *     ptr     New AVP list structure
        !           552:  */
        !           553: extern struct  ppp_l2tp_avp_list *ppp_l2tp_avp_list_copy(
        !           554:                        const struct ppp_l2tp_avp_list *list);
        !           555: 
        !           556: /*
        !           557:  * Destroy an AVP list.
        !           558:  *
        !           559:  * Arguments:
        !           560:  *     listp   Pointer to AVP list pointer; it gets set to NULL
        !           561:  */
        !           562: extern void    ppp_l2tp_avp_list_destroy(struct ppp_l2tp_avp_list **listp);
        !           563: 
        !           564: /*
        !           565:  * Encode a list of AVP's into a single buffer, preserving the order
        !           566:  * of the AVP's.  If a shared secret is supplied, and any of the AVP's
        !           567:  * are hidden, then any required random vector AVP's are created and
        !           568:  * inserted automatically.
        !           569:  *
        !           570:  * Arguments:
        !           571:  *     info    AVP info list, terminated with NULL name
        !           572:  *     list    List of AVP structures to encode
        !           573:  *     secret  Shared secret for hiding AVP's, or NULL for none.
        !           574:  *     slen    Length of shared secret (if secret != NULL)
        !           575:  *     buf     Buffer for the data, or NULL to only compute length.
        !           576:  *
        !           577:  * Returns:
        !           578:  *     -1      If failure (errno is set)
        !           579:  *     length  If successful, length of encoded data (in bytes)
        !           580:  *
        !           581:  * Possibilities for errno:
        !           582:  *     EILSEQ  Invalid data format
        !           583:  */
        !           584: extern int     ppp_l2tp_avp_pack(const struct ppp_l2tp_avp_info *info,
        !           585:                        const struct ppp_l2tp_avp_list *list,
        !           586:                        const u_char *secret, size_t slen, u_char *buf);
        !           587: 
        !           588: /*
        !           589:  * Decode a packet into an array of unpacked AVP structures, preserving
        !           590:  * the order of the AVP's. Random vector AVP's are automatically removed.
        !           591:  *
        !           592:  * Arguments:
        !           593:  *     info    AVP info list, terminated with NULL name
        !           594:  *     data    Original packed AVP data packet
        !           595:  *     dlen    Length of the data pointed to by 'data'
        !           596:  *     secret  Shared secret for unhiding AVP's, or NULL for none.
        !           597:  *     slen    Length of shared secret (if secret != NULL)
        !           598:  *
        !           599:  * Returns:
        !           600:  *     NULL    If failure (errno is set)
        !           601:  *     length  If successful, the unpacked list
        !           602:  *
        !           603:  * Possibilities for errno:
        !           604:  *     EILSEQ  Invalid data format
        !           605:  *     EAUTH   Hidden AVP found but no shared secret was provided
        !           606:  *     ENOSYS  Mandatory but unrecognized AVP seen (i.e., AVP not in list)
        !           607:  */
        !           608: extern struct  ppp_l2tp_avp_list *ppp_l2tp_avp_unpack(
        !           609:                        const struct ppp_l2tp_avp_info *info,
        !           610:                        const u_char *data, size_t dlen,
        !           611:                        const u_char *secret, size_t slen);
        !           612: 
        !           613: /*
        !           614:  * AVP decoders
        !           615:  */
        !           616: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_MESSAGE_TYPE;
        !           617: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_RESULT_CODE;
        !           618: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PROTOCOL_VERSION;
        !           619: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_FRAMING_CAPABILITIES;
        !           620: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_BEARER_CAPABILITIES;
        !           621: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_TIE_BREAKER;
        !           622: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_FIRMWARE_REVISION;
        !           623: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_HOST_NAME;
        !           624: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_VENDOR_NAME;
        !           625: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_ASSIGNED_TUNNEL_ID;
        !           626: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_RECEIVE_WINDOW_SIZE;
        !           627: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CHALLENGE;
        !           628: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CAUSE_CODE;
        !           629: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CHALLENGE_RESPONSE;
        !           630: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_ASSIGNED_SESSION_ID;
        !           631: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CALL_SERIAL_NUMBER;
        !           632: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_MINIMUM_BPS;
        !           633: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_MAXIMUM_BPS;
        !           634: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_BEARER_TYPE;
        !           635: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_FRAMING_TYPE;
        !           636: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CALLED_NUMBER;
        !           637: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CALLING_NUMBER;
        !           638: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_SUB_ADDRESS;
        !           639: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_TX_CONNECT_SPEED;
        !           640: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PHYSICAL_CHANNEL_ID;
        !           641: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_INITIAL_RECV_CONFREQ;
        !           642: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_LAST_SENT_CONFREQ;
        !           643: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_LAST_RECV_CONFREQ;
        !           644: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PROXY_AUTHEN_TYPE;
        !           645: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PROXY_AUTHEN_NAME;
        !           646: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PROXY_AUTHEN_CHALLENGE;
        !           647: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PROXY_AUTHEN_ID;
        !           648: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PROXY_AUTHEN_RESPONSE;
        !           649: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_CALL_ERRORS;
        !           650: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_ACCM;
        !           651: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_RANDOM_VECTOR;
        !           652: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_PRIVATE_GROUP_ID;
        !           653: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_RX_CONNECT_SPEED;
        !           654: extern ppp_l2tp_avp_decode_t   ppp_l2tp_avp_decode_SEQUENCING_REQUIRED;
        !           655: 
        !           656: __END_DECLS
        !           657: 
        !           658: #endif /* _PPP_L2TP_PDEL_PPP_PPP_L2TP_AVP_H_ */

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