Annotation of embedaddon/mpd/src/pptp_ctrl.h, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * pptp_ctrl.h
                      4:  *
                      5:  * Written by Archie Cobbs <archie@freebsd.org>
                      6:  * Copyright (c) 1998-1999 Whistle Communications, Inc. All rights reserved.
                      7:  * See ``COPYRIGHT.whistle''
                      8:  */
                      9: 
                     10: #if !defined(_PPTP_CTRL_H_) || defined(_WANT_PPTP_FIELDS)
                     11: #ifndef _WANT_PPTP_FIELDS
                     12: #define        _PPTP_CTRL_H_
                     13: 
                     14: /*
                     15:  * DEFINITIONS
                     16:  */
                     17: 
                     18:   /* Definitions per the spec */
                     19:   #define PPTP_PORT            1723
                     20:   #define PPTP_MTU             1532
                     21:   #define PPTP_PROTO_VERS      0x0100
                     22:   #define PPTP_MAGIC           0x1a2b3c4d
                     23:   #define PPTP_IDLE_TIMEOUT    60
                     24: 
                     25:   #define PPTP_HOSTNAME_LEN    64
                     26:   #define PPTP_VENDOR_LEN      64
                     27:   #define PPTP_PHONE_LEN       64
                     28:   #define PPTP_SUBADDR_LEN     64
                     29:   #define PPTP_STATS_LEN       128
                     30: 
                     31:   /* Control messages */
                     32:   #define PPTP_CTRL_MSG_TYPE   1
                     33: 
                     34:   enum {
                     35:     PPTP_StartCtrlConnRequest = 1,
                     36:     PPTP_StartCtrlConnReply = 2,
                     37:     PPTP_StopCtrlConnRequest = 3,
                     38:     PPTP_StopCtrlConnReply = 4,
                     39:     PPTP_EchoRequest = 5,
                     40:     PPTP_EchoReply = 6,
                     41:     PPTP_OutCallRequest = 7,
                     42:     PPTP_OutCallReply = 8,
                     43:     PPTP_InCallRequest = 9,
                     44:     PPTP_InCallReply = 10,
                     45:     PPTP_InCallConn = 11,
                     46:     PPTP_CallClearRequest = 12,
                     47:     PPTP_CallDiscNotify = 13,
                     48:     PPTP_WanErrorNotify = 14,
                     49:     PPTP_SetLinkInfo = 15
                     50:   };
                     51: 
                     52:   #define PPTP_MIN_CTRL_TYPE           1
                     53:   #define PPTP_MAX_CTRL_TYPE           16
                     54: 
                     55:   #define PPTP_VALID_CTRL_TYPE(x)      \
                     56:        ((x) >= PPTP_MIN_CTRL_TYPE && (x) < PPTP_MAX_CTRL_TYPE)
                     57: 
                     58:   /* Framing capabilities */
                     59:   #define PPTP_FRAMECAP_ASYNC          0x01
                     60:   #define PPTP_FRAMECAP_SYNC           0x02
                     61:   #define PPTP_FRAMECAP_ANY            0x03
                     62: 
                     63:   /* Bearer capabilities */
                     64:   #define PPTP_BEARCAP_ANALOG          0x01
                     65:   #define PPTP_BEARCAP_DIGITAL         0x02
                     66:   #define PPTP_BEARCAP_ANY             0x03
                     67: 
                     68:   /* General error codes */
                     69:   #define PPTP_ERROR_NONE              0
                     70:   #define PPTP_ERROR_NOT_CONNECTED     1
                     71:   #define PPTP_ERROR_BAD_FORMAT                2
                     72:   #define PPTP_ERROR_BAD_VALUE         3
                     73:   #define PPTP_ERROR_NO_RESOURCE       4
                     74:   #define PPTP_ERROR_BAD_CALL_ID       5
                     75:   #define PPTP_ERROR_PAC_ERROR         6
                     76: 
                     77:   /* All reserved fields have this prefix */
                     78:   #define PPTP_RESV_PREF               "resv"
                     79: 
                     80:   /* Message structures */
                     81:   struct pptpMsgHead {
                     82:     u_int16_t  length;         /* total length */
                     83:     u_int16_t  msgType;        /* PPTP message type */
                     84:     u_int32_t  magic;          /* magic cookie */
                     85:     u_int16_t  type;           /* control message type */
                     86:     u_int16_t  resv0;          /* reserved */
                     87:   };
                     88:   typedef struct pptpMsgHead   *PptpMsgHead;
                     89: 
                     90: #else
                     91:   { { "len", 2 }, { "msgType", 2 }, { "magic", 4 }, { "type", 2 },
                     92:     { PPTP_RESV_PREF "0", 2 }, { NULL, 0 } },
                     93: #endif
                     94: #ifndef _WANT_PPTP_FIELDS
                     95: 
                     96:   struct pptpStartCtrlConnRequest {
                     97:     u_int16_t          vers;           /* protocol version */
                     98:     u_int16_t          resv0;          /* reserved */
                     99:     u_int32_t          frameCap;       /* framing capabilities */
                    100:     u_int32_t          bearCap;        /* bearer capabilities */
                    101:     u_int16_t          maxChan;        /* maximum # channels */
                    102:     u_int16_t          firmware;       /* firmware revision */
                    103:     char               host[PPTP_HOSTNAME_LEN];        /* host name */
                    104:     char               vendor[PPTP_VENDOR_LEN];        /* vendor name */
                    105:   };
                    106: 
                    107: #else
                    108:   { { "vers", 2 }, { PPTP_RESV_PREF "0", 2 }, { "frameCap", 4 },
                    109:     { "bearCap", 4 }, { "maxChan", 2 }, { "firm", 2 },
                    110:     { "host", PPTP_HOSTNAME_LEN }, { "vend", PPTP_VENDOR_LEN }, { NULL, 0 } },
                    111: #endif
                    112: #ifndef _WANT_PPTP_FIELDS
                    113: 
                    114:   struct pptpStartCtrlConnReply {
                    115:     u_int16_t          vers;           /* protocol version */
                    116:     u_int8_t           result;         /* result code */
                    117:     u_int8_t           err;            /* error code */
                    118:     u_int32_t          frameCap;       /* framing capabilities */
                    119:     u_int32_t          bearCap;        /* bearer capabilities */
                    120:     u_int16_t          maxChan;        /* maximum # channels */
                    121:     u_int16_t          firmware;       /* firmware revision */
                    122:     char               host[PPTP_HOSTNAME_LEN];        /* host name */
                    123:     char               vendor[PPTP_VENDOR_LEN];        /* vendor name */
                    124:   };
                    125: 
                    126: #else
                    127:   { { "vers", 2 }, { "result", 1 }, { "err", 1 }, { "frameCap", 4 },
                    128:     { "bearCap", 4 }, { "maxChan", 2 }, { "firm", 2 },
                    129:     { "host", PPTP_HOSTNAME_LEN }, { "vend", PPTP_VENDOR_LEN }, { NULL, 0 } },
                    130: #endif
                    131: #ifndef _WANT_PPTP_FIELDS
                    132: 
                    133:   #define PPTP_SCCR_RESL_OK    1       /* channel successfully established */
                    134:   #define PPTP_SCCR_RESL_ERR   2       /* general error; see error code */
                    135:   #define PPTP_SCCR_RESL_EXISTS        3       /* command channel already exists */
                    136:   #define PPTP_SCCR_RESL_AUTH  4       /* not authorized */
                    137:   #define PPTP_SCCR_RESL_VERS  5       /* incompatible protocol version */
                    138: 
                    139:   struct pptpStopCtrlConnRequest {
                    140:     u_int8_t           reason;         /* reason */
                    141:     u_int8_t           resv0;          /* reserved */
                    142:     u_int16_t          resv1;          /* reserved */
                    143:   };
                    144: 
                    145: #else
                    146:   { { "reason", 1 }, { PPTP_RESV_PREF "0", 1 }, { PPTP_RESV_PREF "1", 2 },
                    147:     { NULL, 0 } },
                    148: #endif
                    149: #ifndef _WANT_PPTP_FIELDS
                    150: 
                    151:   #define PPTP_SCCR_REAS_NONE  1       /* general */
                    152:   #define PPTP_SCCR_REAS_PROTO 2       /* can't support protocol version */
                    153:   #define PPTP_SCCR_REAS_LOCAL 3       /* local shutdown */
                    154: 
                    155:   struct pptpStopCtrlConnReply {
                    156:     u_int8_t           result;         /* result code */
                    157:     u_int8_t           err;            /* error code */
                    158:     u_int16_t          resv0;          /* reserved */
                    159:   };
                    160: 
                    161: #else
                    162:   { { "result", 1 }, { "err", 1 }, { PPTP_RESV_PREF "0", 2 }, { NULL, 0 } },
                    163: #endif
                    164: #ifndef _WANT_PPTP_FIELDS
                    165: 
                    166:   struct pptpEchoRequest {
                    167:     u_int32_t          id;             /* identifier */
                    168:   };
                    169: 
                    170: #else
                    171:   { { "id", 4 }, { NULL, 0 } },
                    172: #endif
                    173: #ifndef _WANT_PPTP_FIELDS
                    174: 
                    175:   struct pptpEchoReply {
                    176:     u_int32_t          id;             /* identifier */
                    177:     u_int8_t           result;         /* result code */
                    178:     u_int8_t           err;            /* error code */
                    179:     u_int16_t          resv0;          /* reserved */
                    180:   };
                    181: 
                    182: #else
                    183:   { { "id", 4 }, { "result", 1 }, { "err", 1 },
                    184:     { "ignore", 2 }, { NULL, 0 } },
                    185: #endif
                    186: #ifndef _WANT_PPTP_FIELDS
                    187: 
                    188:   #define PPTP_ECHO_RESL_OK    1       /* echo reply is valid */
                    189:   #define PPTP_ECHO_RESL_ERR   2       /* general error; see error code */
                    190: 
                    191:   struct pptpOutCallRequest {
                    192:     u_int16_t          cid;            /* call id */
                    193:     u_int16_t          serno;          /* call serial # */
                    194:     u_int32_t          minBps;         /* minimum BPS */
                    195:     u_int32_t          maxBps;         /* maximum BPS */
                    196:     u_int32_t          bearType;       /* bearer type */
                    197:     u_int32_t          frameType;      /* framing type */
                    198:     u_int16_t          recvWin;        /* pkt receive window size */
                    199:     u_int16_t          ppd;            /* pkt processing delay */
                    200:     u_int16_t          numLen;         /* phone number length */
                    201:     u_int16_t          resv0;          /* reserved */
                    202:     char               phone[PPTP_PHONE_LEN];          /* phone number */
                    203:     char               subaddr[PPTP_SUBADDR_LEN];      /* sub-address */
                    204:   };
                    205: 
                    206: #else
                    207:   { { "cid", 2 }, { "serno", 2 }, { "minBPS", 4 }, { "maxBPS", 4 },
                    208:     { "bearType", 4 }, { "frameType", 4 },{ "recvWin", 2 }, { "ppd", 2 },
                    209:     { "numLen", 2 }, { PPTP_RESV_PREF "0", 2 },
                    210:     { "phone", PPTP_PHONE_LEN }, { "subaddr", PPTP_SUBADDR_LEN },
                    211:     { NULL, 0 } },
                    212: #endif
                    213: #ifndef _WANT_PPTP_FIELDS
                    214: 
                    215:   struct pptpOutCallReply {
                    216:     u_int16_t          cid;            /* call id */
                    217:     u_int16_t          peerCid;        /* peer call id */
                    218:     u_int8_t           result;         /* result code */
                    219:     u_int8_t           err;            /* error code */
                    220:     u_int16_t          cause;          /* cause code */
                    221:     u_int32_t          speed;          /* cause code */
                    222:     u_int16_t          recvWin;        /* pkt receive window size code */
                    223:     u_int16_t          ppd;            /* pkt processing delay */
                    224:     u_int32_t          channel;        /* physical channel id */
                    225:   };
                    226: 
                    227: #else
                    228:   { { "cid", 2 }, { "peerCid", 2 }, { "result", 1 }, { "err", 1 },
                    229:     { "cause", 2 }, { "speed", 4 }, { "recvWin", 2 }, { "ppd", 2 },
                    230:     { "channel", 4 }, { NULL, 0 } },
                    231: #endif
                    232: #ifndef _WANT_PPTP_FIELDS
                    233: 
                    234:   #define PPTP_OCR_RESL_OK     1       /* call established OK */
                    235:   #define PPTP_OCR_RESL_ERR    2       /* general error; see error code */
                    236:   #define PPTP_OCR_RESL_NOCARR 3       /* no carrier */
                    237:   #define PPTP_OCR_RESL_BUSY   4       /* busy */
                    238:   #define PPTP_OCR_RESL_NODIAL 5       /* no dialtone */
                    239:   #define PPTP_OCR_RESL_TIMED  6       /* timed out */
                    240:   #define PPTP_OCR_RESL_ADMIN  7       /* administratvely prohibited */
                    241: 
                    242:   struct pptpInCallRequest {
                    243:     u_int16_t          cid;            /* call id */
                    244:     u_int16_t          serno;          /* call serial # */
                    245:     u_int32_t          bearType;       /* bearer type */
                    246:     u_int32_t          channel;        /* physical channel id */
                    247:     u_int16_t          dialedLen;      /* dialed number len */
                    248:     u_int16_t          dialingLen;     /* dialing number len */
                    249:     char               dialed[PPTP_PHONE_LEN];         /* dialed number */
                    250:     char               dialing[PPTP_PHONE_LEN];        /* dialing number */
                    251:     char               subaddr[PPTP_SUBADDR_LEN];      /* sub-address */
                    252:   };
                    253: 
                    254: #else
                    255:   { { "cid", 2 }, { "serno", 2 }, { "bearType", 4 }, { "channel", 4 },
                    256:     { "dialedLen", 2 }, { "dialingLen", 2 }, { "dialed", PPTP_PHONE_LEN },
                    257:     { "dialing", PPTP_PHONE_LEN }, { "subaddr", PPTP_SUBADDR_LEN },
                    258:     { NULL, 0 } },
                    259: #endif
                    260: #ifndef _WANT_PPTP_FIELDS
                    261: 
                    262:   struct pptpInCallReply {
                    263:     u_int16_t          cid;            /* call id */
                    264:     u_int16_t          peerCid;        /* peer call id */
                    265:     u_int8_t           result;         /* result code */
                    266:     u_int8_t           err;            /* error code */
                    267:     u_int16_t          recvWin;        /* pkt receive window size code */
                    268:     u_int16_t          ppd;            /* pkt processing delay */
                    269:     u_int16_t          resv0;          /* reserved */
                    270:   };
                    271: 
                    272: #else
                    273:   { { "cid", 2 }, { "peerCid", 2 }, { "result", 1 }, { "err", 1 },
                    274:     { "recvWin", 2 }, { "ppd", 2 }, { PPTP_RESV_PREF "0", 2 },
                    275:     { NULL, 0 } },
                    276: #endif
                    277: #ifndef _WANT_PPTP_FIELDS
                    278: 
                    279:   #define PPTP_ICR_RESL_OK     1       /* call established OK */
                    280:   #define PPTP_ICR_RESL_ERR    2       /* general error; see error code */
                    281:   #define PPTP_ICR_RESL_NAK    3       /* do not accept */
                    282: 
                    283:   struct pptpInCallConn {
                    284:     u_int16_t          peerCid;        /* peer call id */
                    285:     u_int16_t          resv0;          /* reserved */
                    286:     u_int32_t          speed;          /* connect speed */
                    287:     u_int16_t          recvWin;        /* pkt receive window size code */
                    288:     u_int16_t          ppd;            /* pkt processing delay */
                    289:     u_int32_t          frameType;      /* framing type */
                    290:   };
                    291: 
                    292: #else
                    293:   { { "peerCid", 2 }, { PPTP_RESV_PREF "0", 2 }, { "speed", 4 },
                    294:     { "recvWin", 2 }, { "ppd", 2 }, { "frameType", 4 }, { NULL, 0 } },
                    295: #endif
                    296: #ifndef _WANT_PPTP_FIELDS
                    297: 
                    298:   struct pptpCallClearRequest {
                    299:     u_int16_t          cid;            /* PNS assigned call id */
                    300:     u_int16_t          resv0;          /* reserved */
                    301:   };
                    302: 
                    303: #else
                    304:   { { "cid", 2 }, { PPTP_RESV_PREF "0", 2 }, { NULL, 0 } },
                    305: #endif
                    306: #ifndef _WANT_PPTP_FIELDS
                    307: 
                    308:   struct pptpCallDiscNotify {
                    309:     u_int16_t          cid;            /* PAC assigned call id */
                    310:     u_int8_t           result;         /* result code */
                    311:     u_int8_t           err;            /* error code */
                    312:     u_int16_t          cause;          /* cause code */
                    313:     u_int16_t          resv0;          /* reserved */
                    314:     char               stats[PPTP_STATS_LEN];  /* call stats */
                    315:   };
                    316: 
                    317: #else
                    318:   { { "cid", 2 }, { "result", 1 }, { "err", 1 }, { "cause", 2 },
                    319:     { PPTP_RESV_PREF "0", 2 }, { "stats", PPTP_STATS_LEN },
                    320:     { NULL, 0 } },
                    321: #endif
                    322: #ifndef _WANT_PPTP_FIELDS
                    323: 
                    324:   #define PPTP_CDN_RESL_CARR   1       /* lost carrier */
                    325:   #define PPTP_CDN_RESL_ERR    2       /* general error; see error code */
                    326:   #define PPTP_CDN_RESL_ADMIN  3       /* administrative reason */
                    327:   #define PPTP_CDN_RESL_REQ    4       /* received disconnect request */
                    328: 
                    329:   struct pptpWanErrorNotify {
                    330:     u_int16_t          cid;            /* PNS assigned call id */
                    331:     u_int16_t          resv0;          /* reserved */
                    332:     u_int32_t          crc;            /* crc errors */
                    333:     u_int32_t          frame;          /* framing errors */
                    334:     u_int32_t          hdw;            /* hardware errors */
                    335:     u_int32_t          ovfl;           /* buffer overrun errors */
                    336:     u_int32_t          timeout;        /* timeout errors */
                    337:     u_int32_t          align;          /* alignment errors */
                    338:   };
                    339: 
                    340: #else
                    341:   { { "cid", 2 }, { PPTP_RESV_PREF "0", 2 }, { "crc", 4 },
                    342:     { "frame", 4 }, { "hdw", 4 }, { "ovfl", 4 }, { "timeout", 4 },
                    343:     { "align", 4 }, { NULL, 0 } },
                    344: #endif
                    345: #ifndef _WANT_PPTP_FIELDS
                    346: 
                    347:   struct pptpSetLinkInfo {
                    348:     u_int16_t          cid;            /* call id */
                    349:     u_int16_t          resv0;          /* reserved */
                    350:     u_int32_t          sendAccm;       /* send ACCM */
                    351:     u_int32_t          recvAccm;       /* receive ACCM */
                    352:   };
                    353: 
                    354: #else
                    355:   { { "cid", 2 }, { PPTP_RESV_PREF "0", 2 }, { "sendAccm", 4 },
                    356:     { "recvAccm", 4 }, { NULL, 0 } },
                    357: #endif
                    358: #ifndef _WANT_PPTP_FIELDS
                    359: 
                    360:   #define PPTP_CTRL_MAX_FRAME  \
                    361:        (sizeof(struct pptpMsgHead) + sizeof(struct pptpInCallRequest))
                    362:   #define PPTP_CTRL_MAX_FIELDS 14
                    363: 
                    364:   /* Describes one field of a PPTP control message structure */
                    365:   struct pptpfield {
                    366:     const char *name;
                    367:     u_short    length;
                    368:   };
                    369:   typedef struct pptpfield     *PptpField;
                    370: 
                    371:   /* Link <-> control liason structures and callback function types */
                    372:   struct pptplinkinfo {                /* PPTP's info for accessing link code */
                    373:     void       *cookie;        /* NULL indicates response is invalid */
                    374:     void       (*result)(void *cookie, const char *errmsg, int frameType);
                    375:     void       (*setLinkInfo)(void *cookie, u_int32_t sa, u_int32_t ra);
                    376:     void       (*cancel)(void *cookie);        /* cancel outgoing call */
                    377:   };
                    378:   typedef struct pptplinkinfo  *PptpLinkInfo;
                    379: 
                    380:   struct pptpctrlinfo {                /* Link's info for accessing PPTP code */
                    381:     void               *cookie;        /* NULL indicates response is invalid */
                    382:     struct u_addr      peer_addr;      /* Peer IP address and port */
                    383:     in_port_t          peer_port;
                    384:     void               (*close)(void *cookie, int result, int err, int cause);
                    385:     void               (*answer)(void *cookie, int rs, int er, int cs, int sp);
                    386:     void               (*connected)(void *cookie, int sp);
                    387:     void               (*setLinkInfo)(void *cookie, u_int32_t sa, u_int32_t ra);
                    388:   };
                    389:   typedef struct pptpctrlinfo  *PptpCtrlInfo;
                    390: 
                    391:   typedef struct pptplinkinfo  (*PptpGetInLink_t)(struct pptpctrlinfo *cinfo,
                    392:                                  struct u_addr *self, struct u_addr *peer, in_port_t port, 
                    393:                                  int bearType,
                    394:                                  const char *callingNum,
                    395:                                  const char *calledNum,
                    396:                                  const char *subAddress);
                    397: 
                    398:   typedef struct pptplinkinfo  (*PptpGetOutLink_t)(struct pptpctrlinfo *cinfo,
                    399:                                  struct u_addr *self, struct u_addr *peer, in_port_t port, 
                    400:                                  int bearType, int frameType, int minBps, int maxBps,
                    401:                                  const char *calledNum,
                    402:                                  const char *subAddress);
                    403: 
                    404: /*
                    405:  * FUNCTIONS
                    406:  */
                    407: 
                    408:   extern int                   PptpCtrlInit(PptpGetInLink_t getInLink,
                    409:                                  PptpGetOutLink_t getOutLink);
                    410: 
                    411:   extern void*                 PptpCtrlListen(struct u_addr *ip, in_port_t port);
                    412:   extern void                  PptpCtrlUnListen(void *listener);
                    413: 
                    414:   extern void                  PptpCtrlInCall(struct pptpctrlinfo *cinfo,
                    415:                                  struct pptplinkinfo *linfo,
                    416:                                  struct u_addr *locip, struct u_addr *ip,
                    417:                                  in_port_t port, int bearType, int frameType,
                    418:                                  int minBps, int maxBps,
                    419:                                  const char *callingNum,
                    420:                                  const char *calledNum,
                    421:                                  const char *subAddress);
                    422: 
                    423:   extern void                  PptpCtrlOutCall(struct pptpctrlinfo *cinfo,
                    424:                                  struct pptplinkinfo *linfo,
                    425:                                  struct u_addr *locip, struct u_addr *ip,
                    426:                                  in_port_t port, int bearType, int frameType,
                    427:                                  int minBps, int maxBps,
                    428:                                  const char *calledNum,
                    429:                                  const char *subAddress);
                    430: 
                    431:   extern int                   PptpCtrlGetSessionInfo(struct pptpctrlinfo *cp,
                    432:                                  struct u_addr *selfAddr,
                    433:                                  struct u_addr *peerAddr,
                    434:                                  u_int16_t *selfCid, u_int16_t *peerCid,
                    435:                                  u_int16_t *peerWin, u_int16_t *peerPpd);
                    436: 
                    437: /*
                    438:  * Get local/remote hostnames.
                    439:  */
                    440:   extern int   PptpCtrlGetSelfName(struct pptpctrlinfo *cp,
                    441:                        void *buf, size_t buf_len);
                    442:   extern int   PptpCtrlGetPeerName(struct pptpctrlinfo *cp,
                    443:                        void *buf, size_t buf_len);
                    444: 
                    445: #endif /* #ifndef _WANT_PPTP_FIELDS */
                    446: #endif /* #if !defined(_PPTP_CTRL_H_) || defined(_WANT_PPTP_FIELDS) */
                    447: 

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