INC_LCP_OPT(TY_AUTHPROTO, 5, o);
INC_FSM_OPT(TY_AUTHPROTO, 5, o);
LcpSendConfigReq(struct fsm *fp){  /* Send config REQ please */  struct physical *p = link2physical(fp->link);  struct lcp *lcp = fsm2lcp(fp);  u_char buff[200];  struct lcp_opt *o;  struct mp *mp;  u_int16_t proto;  u_short maxmru;  if (!p) {    log_Printf(LogERROR, "%s: LcpSendConfigReq: Not a physical link !\n",              fp->link->name);    return;  }  o = (struct lcp_opt *)buff;  if (!physical_IsSync(p)) {    if (lcp->want_acfcomp && !REJECTED(lcp, TY_ACFCOMP))      INC_LCP_OPT(TY_ACFCOMP, 2, o);    if (lcp->want_protocomp && !REJECTED(lcp, TY_PROTOCOMP))      INC_LCP_OPT(TY_PROTOCOMP, 2, o);    if (!REJECTED(lcp, TY_ACCMAP)) {      ua_htonl(&lcp->want_accmap, o->data);      INC_LCP_OPT(TY_ACCMAP, 6, o);    }  }  maxmru = p ? physical_DeviceMTU(p) : 0;  if (lcp->cfg.max_mru && (!maxmru || maxmru > lcp->cfg.max_mru))    maxmru = lcp->cfg.max_mru;  if (maxmru && lcp->want_mru > maxmru) {    log_Printf(LogWARN, "%s: Reducing configured MRU from %u to %u\n",               fp->link->name, lcp->want_mru, maxmru);    lcp->want_mru = maxmru;  }  if (!REJECTED(lcp, TY_MRU)) {    ua_htons(&lcp->want_mru, o->data);    INC_LCP_OPT(TY_MRU, 4, o);  }  if (lcp->want_magic && !REJECTED(lcp, TY_MAGICNUM)) {    ua_htonl(&lcp->want_magic, o->data);    INC_LCP_OPT(TY_MAGICNUM, 6, o);  }  if (lcp->want_lqrperiod && !REJECTED(lcp, TY_QUALPROTO)) {    proto = PROTO_LQR;    ua_htons(&proto, o->data);    ua_htonl(&lcp->want_lqrperiod, o->data + 2);    INC_LCP_OPT(TY_QUALPROTO, 8, o);  }  switch (lcp->want_auth) {  case PROTO_PAP:    proto = PROTO_PAP;    ua_htons(&proto, o->data);    INC_LCP_OPT(TY_AUTHPROTO, 4, o);    break;  case PROTO_CHAP:    proto = PROTO_CHAP;    ua_htons(&proto, o->data);    o->data[2] = lcp->want_authtype;    INC_LCP_OPT(TY_AUTHPROTO, 5, o);    break;  }  if (!REJECTED(lcp, TY_CALLBACK)) {    if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_AUTH)) {      *o->data = CALLBACK_AUTH;      INC_LCP_OPT(TY_CALLBACK, 3, o);    } else if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_CBCP)) {      *o->data = CALLBACK_CBCP;      INC_LCP_OPT(TY_CALLBACK, 3, o);    } else if (lcp->want_callback.opmask & CALLBACK_BIT(CALLBACK_E164)) {      int sz = strlen(lcp->want_callback.msg);      if (sz > sizeof o->data - 1) {        sz = sizeof o->data - 1;        log_Printf(LogWARN, "Truncating E164 data to %d octets (oops!)\n", sz);      }      *o->data = CALLBACK_E164;      memcpy(o->data + 1, lcp->want_callback.msg, sz);      INC_LCP_OPT(TY_CALLBACK, sz + 3, o);    }  }  if (lcp->want_mrru && !REJECTED(lcp, TY_MRRU)) {    ua_htons(&lcp->want_mrru, o->data);    INC_LCP_OPT(TY_MRRU, 4, o);    if (lcp->want_shortseq && !REJECTED(lcp, TY_SHORTSEQ))      INC_LCP_OPT(TY_SHORTSEQ, 2, o);  }  mp = &lcp->fsm.bundle->ncp.mp;  if (mp->cfg.enddisc.class != 0 && IsEnabled(mp->cfg.negenddisc) &&      !REJECTED(lcp, TY_ENDDISC)) {    *o->data = mp->cfg.enddisc.class;    memcpy(o->data+1, mp->cfg.enddisc.address, mp->cfg.enddisc.len);    INC_LCP_OPT(TY_ENDDISC, mp->cfg.enddisc.len + 3, o);  }  fsm_Output(fp, CODE_CONFIGREQ, fp->reqid, buff, (u_char *)o - buff,             MB_LCPOUT);}