1706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh/*- 2706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Copyright (c) 1996 - 2001 Brian Somers <brian@Awfulhak.org> 3706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * based on work by Toshiharu OHNO <tony-o@iij.ad.jp> 4706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Internet Initiative Japan, Inc (IIJ) 5706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * All rights reserved. 6706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 7706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Redistribution and use in source and binary forms, with or without 8706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * modification, are permitted provided that the following conditions 9706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * are met: 10706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 1. Redistributions of source code must retain the above copyright 11706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * notice, this list of conditions and the following disclaimer. 12706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 2. Redistributions in binary form must reproduce the above copyright 13706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * notice, this list of conditions and the following disclaimer in the 14706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * documentation and/or other materials provided with the distribution. 15706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 16706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * SUCH DAMAGE. 27706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 28706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * $FreeBSD: src/usr.sbin/ppp/ipcp.h,v 1.35.40.1 2010/12/21 17:10:29 kensmith Exp $ 29706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh */ 30706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 31706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define IPCP_MAXCODE CODE_CODEREJ 32706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 33706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_IPADDRS 1 34706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_COMPPROTO 2 35706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_IPADDR 3 36706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 37706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh/* Domain NameServer and NetBIOS NameServer options */ 38706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 39706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_PRIMARY_DNS 129 40706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_PRIMARY_NBNS 130 41706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_SECONDARY_DNS 131 42706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_SECONDARY_NBNS 132 43706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define TY_ADJUST_NS 119 /* subtract from NS val for REJECT bit */ 44706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 45706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct ipcp { 46706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct fsm fsm; /* The finite state machine */ 47706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 48706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct { 49706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct { 50706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh int slots; /* Maximum VJ slots */ 51706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned slotcomp : 1; /* Slot compression */ 52706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned neg : 2; /* VJ negotiation */ 53706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } vj; 54706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 55706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct ncprange my_range; /* MYADDR spec */ 56706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr netmask; /* Iface netmask (unused by most OSs) */ 57706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct ncprange peer_range; /* HISADDR spec */ 58706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct iplist peer_list; /* Ranges of HISADDR values */ 59706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 60706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr TriggerAddress; /* Address to suggest in REQ */ 61706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned HaveTriggerAddress : 1; /* Trigger address specified */ 62706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 63706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct { 64706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr dns[2]; /* DNS addresses offered */ 65706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned dns_neg : 2; /* dns negotiation */ 66706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr nbns[2]; /* NetBIOS NS addresses offered */ 67706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } ns; 68706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 69706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct fsm_retry fsm; /* frequency to resend requests */ 70706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } cfg; 71706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 72706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct { 73706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct slcompress cslc; /* VJ state */ 74706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct slstat slstat; /* VJ statistics */ 75706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } vj; 76706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 77706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct { 78706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned resolver : 1; /* Found resolv.conf ? */ 79706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned writable : 1; /* Can write resolv.conf ? */ 80706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr dns[2]; /* Current DNS addresses */ 81706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char *resolv; /* Contents of resolv.conf */ 82706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char *resolv_nons; /* Contents of resolv.conf without ns */ 83706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } ns; 84706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 85706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned heis1172 : 1; /* True if he is speaking rfc1172 */ 86706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 87706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned peer_req : 1; /* Any TY_IPADDR REQs from the peer ? */ 88706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr peer_ip; /* IP address he's willing to use */ 89706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh u_int32_t peer_compproto; /* VJ params he's willing to use */ 90706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 91706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr ifmask; /* Interface netmask */ 92706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 93706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct in_addr my_ip; /* IP address I'm willing to use */ 94706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh u_int32_t my_compproto; /* VJ params I'm willing to use */ 95706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 96706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh u_int32_t peer_reject; /* Request codes rejected by peer */ 97706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh u_int32_t my_reject; /* Request codes I have rejected */ 98706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 99706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct pppThroughput throughput; /* throughput statistics */ 100706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct mqueue Queue[3]; /* Output packet queues */ 101706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh}; 102706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 103706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define fsm2ipcp(fp) (fp->proto == PROTO_IPCP ? (struct ipcp *)fp : NULL) 104706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define IPCP_QUEUES(ipcp) (sizeof ipcp->Queue / sizeof ipcp->Queue[0]) 105706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 106706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct bundle; 107706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct link; 108706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct cmdargs; 109706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct iface_addr; 110706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 111706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_Init(struct ipcp *, struct bundle *, struct link *, 112706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh const struct fsm_parent *); 113706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_Destroy(struct ipcp *); 114706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_Setup(struct ipcp *, u_int32_t); 115706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_SetLink(struct ipcp *, struct link *); 116706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 117706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_Show(struct cmdargs const *); 118706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern struct mbuf *ipcp_Input(struct bundle *, struct link *, struct mbuf *); 119706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_AddInOctets(struct ipcp *, int); 120706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_AddOutOctets(struct ipcp *, int); 121706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_UseHisIPaddr(struct bundle *, struct in_addr); 122706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_UseHisaddr(struct bundle *, const char *, int); 123706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_vjset(struct cmdargs const *); 124706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_IfaceAddrAdded(struct ipcp *, const struct iface_addr *); 125706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_IfaceAddrDeleted(struct ipcp *, const struct iface_addr *); 126706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_InterfaceUp(struct ipcp *); 127706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern struct in_addr addr2mask(struct in_addr); 128706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_WriteDNS(struct ipcp *); 129706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_RestoreDNS(struct ipcp *); 130706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void ipcp_LoadDNS(struct ipcp *); 131706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern size_t ipcp_QueueLen(struct ipcp *); 132706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int ipcp_PushPacket(struct ipcp *, struct link *); 133