The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/if_spppvar.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: if_spppvar.h,v 1.42 2021/06/01 04:59:50 yamaguchi Exp $        */
    2 
    3 #ifndef _NET_IF_SPPPVAR_H_
    4 #define _NET_IF_SPPPVAR_H_
    5 
    6 /*
    7  * Defines for synchronous PPP/Cisco link level subroutines.
    8  *
    9  * Copyright (C) 1994 Cronyx Ltd.
   10  * Author: Serge Vakulenko, <vak@cronyx.ru>
   11  *
   12  * Heavily revamped to conform to RFC 1661.
   13  * Copyright (C) 1997, Joerg Wunsch.
   14  *
   15  * This software is distributed with NO WARRANTIES, not even the implied
   16  * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   17  *
   18  * Authors grant any other persons or organizations permission to use
   19  * or modify this software as long as this message is kept with the software,
   20  * all derivative works or modified versions.
   21  *
   22  * From: Version 2.0, Fri Oct  6 20:39:21 MSK 1995
   23  *
   24  * From: if_sppp.h,v 1.8 1997/10/11 11:25:20 joerg Exp
   25  *
   26  * From: Id: if_sppp.h,v 1.7 1998/12/01 20:20:19 hm Exp
   27  */
   28 
   29 #include <sys/workqueue.h>
   30 #include <sys/pcq.h>
   31 struct sppp;
   32 
   33 struct sppp_work {
   34         struct work      work;
   35         void            *arg;
   36         void            (*func)(struct sppp *, void *);
   37         unsigned int     state;
   38 #define SPPP_WK_FREE    0
   39 #define SPPP_WK_BUSY    1
   40 #define SPPP_WK_UNAVAIL 2
   41 };
   42 
   43 #define IDX_LCP 0               /* idx into state table */
   44 
   45 struct slcp {
   46         u_long  opts;           /* LCP options to send (bitfield) */
   47         u_long  magic;          /* local magic number */
   48         u_long  mru;            /* our max receive unit */
   49         u_long  their_mru;      /* their max receive unit */
   50         u_long  protos;         /* bitmask of protos that are started */
   51         u_char  echoid;         /* id of last keepalive echo request */
   52         /* restart max values, see RFC 1661 */
   53         int     timeout;
   54         int     max_terminate;
   55         int     max_configure;
   56         int     max_failure;
   57         /* multilink variables */
   58         u_long  mrru;           /* our   max received reconstructed unit */
   59         u_long  their_mrru;     /* their max receive dreconstructed unit */
   60         bool    reestablish;    /* reestablish after the next down event */
   61         bool    tlf_sent;       /* call lower layer's tlf before a down event */
   62 };
   63 
   64 #define IDX_IPCP 1              /* idx into state table */
   65 #define IDX_IPV6CP 2            /* idx into state table */
   66 
   67 struct sipcp {
   68         u_long  opts;           /* IPCP options to send (bitfield) */
   69         u_int   flags;
   70 #define IPCP_HISADDR_SEEN 1     /* have seen his address already */
   71 #define IPCP_MYADDR_SEEN  2     /* have a local address assigned already */
   72 #define IPCP_MYADDR_DYN   4     /* my address is dynamically assigned */
   73 #define IPCP_HISADDR_DYN  8     /* his address is dynamically assigned */
   74 #ifdef notdef
   75 #define IPV6CP_MYIFID_DYN   2   /* my ifid is dynamically assigned */
   76 #endif
   77 #define IPV6CP_MYIFID_SEEN  4   /* have seen his ifid already */
   78         uint32_t saved_hisaddr;/* if hisaddr (IPv4) is dynamic, save original one here, in network byte order */
   79         uint32_t req_hisaddr;   /* remote address requested */
   80         uint32_t req_myaddr;    /* local address requested */
   81 
   82         uint8_t my_ifid[8];     /* IPv6CP my ifid*/
   83         uint8_t his_ifid[8];    /* IPv6CP his ifid*/
   84 };
   85 
   86 struct sauth {
   87         u_short proto;                  /* authentication protocol to use */
   88         u_short flags;
   89         char    *name;                  /* system identification name */
   90         char    *secret;                /* secret password */
   91         u_char  name_len;               /* no need to have a bigger size */
   92         u_char  secret_len;             /* because proto gives size in a byte */
   93 };
   94 
   95 struct schap {
   96         char     challenge[16];         /* random challenge
   97                                            [don't change size! it's really hardcoded!] */
   98         char     digest[16];
   99         u_char   digest_len;
  100         bool     rechallenging;         /* sent challenge after open */
  101         bool     response_rcvd;         /* receive response, stop sending challenge */
  102 
  103         struct sppp_work         work_challenge_rcvd;
  104 };
  105 
  106 #define IDX_PAP         3
  107 #define IDX_CHAP        4
  108 
  109 #define IDX_COUNT (IDX_CHAP + 1) /* bump this when adding cp's! */
  110 
  111 struct sppp_cp {
  112         u_long           seq;           /* local sequence number */
  113         u_long           rseq;          /* remote sequence number */
  114         int              state;         /* state machine */
  115         u_char           confid;        /* local id of last configuration request */
  116         u_char           rconfid;       /* remote id of last configuration request */
  117         int              rst_counter;   /* restart counter */
  118         int              fail_counter;  /* negotiation failure counter */
  119         struct callout   ch;            /* per-proto and if callouts */
  120         u_char           rcr_type;      /* parsing result of conf-req */
  121         struct mbuf     *mbuf_confreq;  /* received conf-req */
  122         struct mbuf     *mbuf_confnak;  /* received conf-nak or conf-rej */
  123 
  124         struct sppp_work         work_up;
  125         struct sppp_work         work_down;
  126         struct sppp_work         work_open;
  127         struct sppp_work         work_close;
  128         struct sppp_work         work_to;
  129         struct sppp_work         work_rcr;
  130         struct sppp_work         work_rca;
  131         struct sppp_work         work_rcn;
  132         struct sppp_work         work_rtr;
  133         struct sppp_work         work_rta;
  134         struct sppp_work         work_rxj;
  135 };
  136 
  137 struct sppp {
  138         /* NB: pp_if _must_ be first */
  139         struct  ifnet pp_if;    /* network interface data */
  140         struct  ifqueue pp_fastq; /* fast output queue */
  141         struct  ifqueue pp_cpq; /* PPP control protocol queue */
  142         struct  sppp *pp_next;  /* next interface in keepalive list */
  143         u_int   pp_flags;       /* use Cisco protocol instead of PPP */
  144         u_int   pp_ncpflags;    /* enable or disable each NCP */
  145         u_int   pp_framebytes;  /* number of bytes added by (hardware) framing */
  146         u_int   pp_alivecnt;    /* keepalive packets counter */
  147         u_int   pp_alive_interval;      /* keepalive interval */
  148         u_int   pp_loopcnt;     /* loopback detection counter */
  149         u_int   pp_maxalive;    /* number or echo req. w/o reply */
  150         uint64_t        pp_saved_mtu;   /* saved MTU value */
  151         time_t  pp_last_receive;        /* peer's last "sign of life" */
  152         time_t  pp_max_noreceive;       /* seconds since last receive before
  153                                            we start to worry and send echo
  154                                            requests */
  155         time_t  pp_last_activity;       /* second of last payload data s/r */
  156         time_t  pp_idle_timeout;        /* idle seconds before auto-disconnect,
  157                                          * 0 = disabled */
  158         int     pp_auth_failures;       /* authorization failures */
  159         int     pp_max_auth_fail;       /* max. allowed authorization failures */
  160         int     pp_phase;       /* phase we're currently in */
  161         krwlock_t       pp_lock;        /* lock for sppp structure */
  162         int     query_dns;      /* 1 if we want to know the dns addresses */
  163         uint32_t        dns_addrs[2];
  164 #if defined(__FreeBSD__) && __FreeBSD__ >= 3
  165         struct callout_handle ch[IDX_COUNT]; /* per-proto and if callouts */
  166         struct callout_handle pap_my_to_ch; /* PAP needs one more... */
  167 #endif
  168         struct workqueue *wq_cp;
  169         struct sppp_work work_ifdown;
  170         struct sppp_cp scp[IDX_COUNT];
  171         struct slcp lcp;                /* LCP params */
  172         struct sipcp ipcp;              /* IPCP params */
  173         struct sipcp ipv6cp;            /* IPv6CP params */
  174         struct sauth myauth;            /* auth params, i'm peer */
  175         struct sauth hisauth;           /* auth params, i'm authenticator */
  176         struct schap chap;              /* CHAP params */
  177         /*
  178          * These functions are filled in by sppp_attach(), and are
  179          * expected to be used by the lower layer (hardware) drivers
  180          * in order to communicate the (un)availability of the
  181          * communication link.  Lower layer drivers that are always
  182          * ready to communicate (like hardware HDLC) can shortcut
  183          * pp_up from pp_tls, and pp_down from pp_tlf.
  184          */
  185         void    (*pp_up)(struct sppp *);
  186         void    (*pp_down)(struct sppp *);
  187         /*
  188          * These functions need to be filled in by the lower layer
  189          * (hardware) drivers if they request notification from the
  190          * PPP layer whether the link is actually required.  They
  191          * correspond to the tls and tlf actions.
  192          */
  193         void    (*pp_tls)(struct sppp *);
  194         void    (*pp_tlf)(struct sppp *);
  195         /*
  196          * These (optional) functions may be filled by the hardware
  197          * driver if any notification of established connections
  198          * (currently: IPCP up) is desired (pp_con) or any internal
  199          * state change of the interface state machine should be
  200          * signaled for monitoring purposes (pp_chg).
  201          */
  202         void    (*pp_con)(struct sppp *);
  203         void    (*pp_chg)(struct sppp *, int);
  204 };
  205 
  206 #define PP_KEEPALIVE            0x01    /* use keepalive protocol */
  207                                         /* 0x02 was PP_CISCO */
  208                                         /* 0x04 was PP_TIMO */
  209 #define PP_CALLIN               0x08    /* we are being called */
  210 #define PP_NEEDAUTH             0x10    /* remote requested authentication */
  211 #define PP_NOFRAMING            0x20    /* do not add/expect encapsulation
  212                                            around PPP frames (i.e. the serial
  213                                            HDLC like encapsulation, RFC1662) */
  214 #define PP_LOOPBACK             0x40    /* in line loopback mode */
  215 #define PP_LOOPBACK_IFDOWN      0x80    /* if_down() when loopback detected */
  216 #define PP_KEEPALIVE_IFDOWN     0x100   /* if_down() when no ECHO_REPLY received */
  217 #define PP_ADMIN_UP             0x200   /* the interface is up */
  218 
  219 
  220 #define PP_MTU          1500    /* default/minimal MRU */
  221 #define PP_MAX_MRU      2048    /* maximal MRU we want to negotiate */
  222 
  223 #ifdef _KERNEL
  224 void sppp_attach (struct ifnet *);
  225 void sppp_detach (struct ifnet *);
  226 void sppp_input (struct ifnet *, struct mbuf *);
  227 int sppp_ioctl(struct ifnet *, u_long, void *);
  228 struct mbuf *sppp_dequeue (struct ifnet *);
  229 int sppp_isempty (struct ifnet *);
  230 void sppp_flush (struct ifnet *);
  231 #endif
  232 
  233 /*
  234  * Locking notes:
  235  * + spppq is protected by spppq_lock (an adaptive mutex)
  236  *     spppq is a list of all struct sppps, and it is used for
  237  *     sending keepalive packets.
  238  * + struct sppp is protected by sppp->pp_lock (an rwlock)
  239  *     sppp holds configuration parameters for line,
  240  *     authentication and addresses. It also has pointers
  241  *     of functions to notify events to lower layer.
  242  *     When notify events, sppp->pp_lock must be released.
  243  *     Because the event handler implemented in a lower
  244  *     layer often call functions implemented in
  245  *     if_spppsubr.c.
  246  *
  247  * Locking order:
  248  *    - IFNET_LOCK => spppq_lock => struct sppp->pp_lock
  249  *
  250  * NOTICE
  251  * - Lower layers must not acquire sppp->pp_lock
  252  */
  253 #endif /* !_NET_IF_SPPPVAR_H_ */

Cache object: 0bc8698929dcf020f2a3a7d44873e35d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.