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/contrib/ngatm/netnatm/saal/sscoppriv.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 /*
    2  * Copyright (c) 1996-2003
    3  *      Fraunhofer Institute for Open Communication Systems (FhG Fokus).
    4  *      All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   25  * SUCH DAMAGE.
   26  *
   27  * Author: Hartmut Brandt <harti@freebsd.org>
   28  *
   29  * $Begemot: libunimsg/netnatm/saal/sscoppriv.h,v 1.4 2004/07/08 08:22:17 brandt Exp $
   30  *
   31  * Private SSCOP definitions.
   32  *
   33  */
   34 #ifdef _KERNEL
   35 #ifdef __FreeBSD__
   36 #include <netgraph/atm/sscop/ng_sscop_cust.h>
   37 #endif
   38 #else   /* !_KERNEL */
   39 #include "sscopcust.h"
   40 #endif
   41 
   42 /* Argh. BSDi */
   43 #ifndef _BYTE_ORDER
   44 #ifndef BYTE_ORDER
   45 #error "_BYTE_ORDER not defined"
   46 #endif
   47 #define _BYTE_ORDER     BYTE_ORDER
   48 #define _LITTLE_ENDIAN  LITTLE_ENDIAN
   49 #define _BIG_ENDIAN     BIG_ENDIAN
   50 #endif
   51 
   52 /*
   53  * PDU trailer
   54  */
   55 union pdu {
   56   u_int                 sscop_null;
   57   struct {
   58 #if _BYTE_ORDER == _BIG_ENDIAN
   59         u_int           pl : 2;         /* pad length */
   60         u_int           : 1;            /* reserved field */
   61         u_int           s : 1;          /* source */
   62         u_int           type : 4;       /* PDU type */
   63         u_int           ns : 24;        /* sequence number */
   64 #else
   65         u_int           ns : 24;        /* sequence number */
   66         u_int           type : 4;       /* PDU type */
   67         u_int           s : 1;          /* source */
   68         u_int           : 1;            /* reserved field */
   69         u_int           pl : 2;         /* pad length */
   70 #endif
   71   } ss;
   72 };
   73 #define sscop_pl        ss.pl
   74 #define sscop_s         ss.s
   75 #define sscop_type      ss.type
   76 #define sscop_ns        ss.ns
   77 
   78 /*
   79  * seqno list entry format
   80  */
   81 union seqno {
   82   u_int                 sscop_null;
   83   struct {
   84 #if _BYTE_ORDER == _BIG_ENDIAN
   85         u_int           : 8;            /* pad */
   86         u_int           n : 24;         /* seqno */
   87 #else
   88         u_int           n : 24;         /* seqno */
   89         u_int           : 8;            /* pad */
   90 #endif
   91   } ss;
   92 };
   93 #define sscop_n ss.n
   94 
   95 /*
   96  * Begin pdu
   97  */
   98 union bgn {
   99   u_int                 sscop_null;
  100   struct {
  101 #if _BYTE_ORDER == _BIG_ENDIAN
  102         u_int   : 24;                   /* reserved */
  103         u_int   bgns : 8;               /* VT_MR */
  104 #else
  105         u_int   bgns : 8;               /* VT_MR */
  106         u_int   : 24;                   /* reserved */
  107 #endif
  108   } ss;
  109 };
  110 #define sscop_bgns      ss.bgns
  111 
  112 /*
  113  * pdu types
  114  */
  115 enum pdu_type {
  116         PDU_BGN         = 0x1,  /* request initialization */
  117         PDU_BGAK        = 0x2,  /* request acknowledgement */
  118         PDU_END         = 0x3,  /* disconnect command */
  119         PDU_ENDAK       = 0x4,  /* disconnect acknowledgement */
  120         PDU_RS          = 0x5,  /* resynchronisation command */
  121         PDU_RSAK        = 0x6,  /* resynchronisation acknowledgement */
  122         PDU_BGREJ       = 0x7,  /* connection reject */
  123         PDU_SD          = 0x8,  /* sequenced connection-mode data */
  124         PDU_ER          = 0x9,  /* recovery command */
  125         PDU_POLL        = 0xa,  /* xmit state info with req. for recv state */
  126         PDU_STAT        = 0xb,  /* solicited receiver state info */
  127         PDU_USTAT       = 0xc,  /* unsolicited receiver state info */
  128         PDU_UD          = 0xd,  /* unumbered user data */
  129         PDU_MD          = 0xe,  /* unumbered management data */
  130         PDU_ERAK        = 0xf,  /* recovery acknowledgement */
  131 };
  132 
  133 
  134 /*
  135  * These are all signals, that are used by SSCOP. Don't change the order or
  136  * number without also changing the associated tables.
  137  */
  138 enum sscop_sigtype {
  139         /* received PDU's */
  140         SIG_BGN,                /* request initialization */
  141         SIG_BGAK,               /* request acknowledgement */
  142         SIG_END,                /* disconnect command */
  143         SIG_ENDAK,              /* disconnect acknowledgement */
  144         SIG_RS,                 /* resynchronisation command */
  145         SIG_RSAK,               /* resynchronisation acknowledgement */
  146         SIG_BGREJ,              /* connection reject */
  147         SIG_SD,                 /* sequenced connection-mode data */
  148         SIG_ER,                 /* recovery command */
  149         SIG_POLL,               /* xmitter state info with req for recv state */
  150         SIG_STAT,               /* solicited receiver state info */
  151         SIG_USTAT,              /* unsolicited receiver state info */
  152         SIG_UD,                 /* unumbered user data */
  153         SIG_MD,                 /* unumbered management data */
  154         SIG_ERAK,               /* recovery acknoledgement */
  155 
  156         /* timer expiry */
  157         SIG_T_CC,               /* CC timer */
  158         SIG_T_POLL,             /* POLL timer */
  159         SIG_T_KA,               /* KEEP ALIVE timer */
  160         SIG_T_NR,               /* NO RESPONSE timer */
  161         SIG_T_IDLE,             /* IDLE timer */
  162 
  163         /* user originated signals */
  164         SIG_PDU_Q,              /* PDU enqueued pseudosignal */
  165         SIG_USER_DATA,          /* user data request */
  166         SIG_ESTAB_REQ,          /* establish connection request */
  167         SIG_ESTAB_RESP,         /* establish connection response */
  168         SIG_RELEASE_REQ,        /* release connection request */
  169         SIG_RECOVER,            /* automatic recover response */
  170         SIG_SYNC_REQ,           /* resynchronisation request */
  171         SIG_SYNC_RESP,          /* resynchronisation response */
  172         SIG_UDATA,              /* UDATA request */
  173         SIG_MDATA,              /* MDATA request */
  174         SIG_UPDU_Q,             /* UDATA PDU enqueued pseudosignal */
  175         SIG_MPDU_Q,             /* MDATA PDU enqueued pseudosignal */
  176         SIG_RETRIEVE,           /* RETRIEVE */
  177 
  178         /* number of signals */
  179         SIG_NUM
  180 };
  181 
  182 /*
  183  * This is a message as contained in a sscop message queue. It holds a pointer
  184  * to the real message.
  185  */
  186 struct sscop_msg {
  187         sscop_msgq_link_t link;
  188         u_int           seqno;          /* seq no */
  189         u_int           poll_seqno;     /* poll seqno (for messages in xmit buffer) */
  190         u_int           rexmit;         /* in retransmission queue? */
  191         struct SSCOP_MBUF_T *m;         /* the message */
  192 };
  193 
  194 /*
  195  * This structure is used to hold signals in the signal queue
  196  */
  197 struct sscop_sig {
  198         sscop_sigq_link_t link;         /* next signal */
  199         enum sscop_sigtype sig;         /* THE signal */
  200         struct sscop_msg *msg;          /* signal argument (message) */
  201 };
  202 
  203 /*
  204  * This structure holds the entire sscop state
  205  */
  206 struct sscop {
  207         enum sscop_state state; /* current state */
  208         const struct sscop_funcs *funcs;
  209 
  210         /* send state */
  211         u_int   vt_s;           /* seqno for next pdu first time transmitted */
  212         u_int   vt_ps;          /* current poll seqno */
  213         u_int   vt_a;           /* next expected in-sequence sd pdu */
  214         u_int   vt_pa;          /* poll seqno of next stat pdu */
  215         u_int   vt_ms;          /* maximum allowed send sd seqno */
  216         u_int   vt_pd;          /* poll data state */
  217         u_int   vt_cc;          /* connection control state */
  218         u_int   vt_sq;          /* transmitter connection sequence */
  219 
  220         /* receive state */
  221         u_int   vr_r;           /* receive state */
  222         u_int   vr_h;           /* highes expected state */
  223         u_int   vr_mr;          /* maximum acceptable */
  224         u_int   vr_sq;          /* receiver connection state */
  225 
  226         /* timers */
  227         sscop_timer_t t_cc;     /* timer_CC */
  228         sscop_timer_t t_nr;     /* timer_NO_RESPONSE */
  229         sscop_timer_t t_ka;     /* timer KEEP_ALIVE */
  230         sscop_timer_t t_poll;   /* timer_POLL */
  231         sscop_timer_t t_idle;   /* idle timer */
  232 
  233         /* maximum values */
  234         u_int   maxj;           /* maximum uu-info */
  235         u_int   maxk;           /* maximum info */
  236         u_int   maxcc;          /* maximum number of bgn, end, er and rs */
  237         u_int   maxpd;          /* maximum value of vt_pd */
  238         u_int   maxstat;        /* maximum length of list */
  239         u_int   timercc;        /* connection control timer */
  240         u_int   timerka;        /* keep alive timer */
  241         u_int   timernr;        /* no response timer */
  242         u_int   timerpoll;      /* polling */
  243         u_int   timeridle;      /* idle timer */
  244         u_int   robustness;     /* atmf/97-0216 robustness enhancement */
  245         u_int   poll_after_rex; /* optional POLL after re-transmission */
  246         u_int   mr;             /* initial window */
  247 
  248         /*
  249          * buffers and queues.
  250          * All expect the xq hold SD PDUs.
  251          */
  252         sscop_msgq_head_t xq;   /* xmit queue (input from user before xmit) */
  253         sscop_msgq_head_t uxq;  /* UD xmit queue */
  254         sscop_msgq_head_t mxq;  /* MD xmit queue */
  255         sscop_msgq_head_t xbuf; /* transmission buffer (SD PDUs transmitted) */
  256         int     rxq;            /* number of PDUs in retransmission queue */
  257         sscop_msgq_head_t rbuf; /* receive buffer (SD PDUs) */
  258         int     last_end_src;   /* source field from last xmitted end pdu */
  259         int     clear_buffers;  /* flag */
  260         int     credit;         /* send window not closed */
  261         u_int   ll_busy;        /* lower layer busy */
  262         u_int   rs_mr;          /* N(MR) in last RS PDU */
  263         u_int   rs_sq;          /* N(SQ) in last RS PDU */
  264         struct SSCOP_MBUF_T *uu_bgn;    /* last UU data */
  265         struct SSCOP_MBUF_T *uu_bgak;   /*  ... */
  266         struct SSCOP_MBUF_T *uu_bgrej;  /*  ... */
  267         struct SSCOP_MBUF_T *uu_end;    /*  ... */
  268         struct SSCOP_MBUF_T *uu_rs;     /*  ... */
  269 
  270         /* signal queues */
  271         sscop_sigq_head_t       sigs;           /* saved signals */
  272         sscop_sigq_head_t       saved_sigs;     /* saved signals */
  273         int     in_sig;         /* in signal handler */
  274 
  275         /* debugging */
  276         u_int           debug;
  277 
  278         /* AA interface */
  279         void            *aarg;
  280 };
  281 
  282 
  283 /*
  284  * Default values for SSCOP
  285  */
  286 enum {
  287         MAXK            = 4096,
  288         MAXMAXK         = 65528,
  289         MAXJ            = 4096,
  290         MAXMAXJ         = 65524,
  291         MAXCC           = 4,
  292         MAXSTAT         = 67,
  293         MAXPD           = 25,
  294         MAXMR           = 128,          /* ??? */
  295         TIMERCC         = 1000,
  296         TIMERKA         = 2000,
  297         TIMERNR         = 7000,
  298         TIMERPOLL       = 750,
  299         TIMERIDLE       = 15000,
  300 };
  301 
  302 /*
  303  * Sequence number arithmetic
  304  */
  305 #define SEQNO_DIFF(A,B)  (((A) < (B)) ? ((A) + (1<<24) - (B)) : ((A) - (B)))
  306 
  307 /*
  308  * Debugging
  309  */
  310 #ifdef SSCOP_DEBUG
  311 #define VERBOSE(S,M,F)  if ((S)->debug & (M)) (S)->funcs->verbose F
  312 #define VERBERR(S,M,F)  if ((S)->debug & (M)) (S)->funcs->verbose F
  313 #define ISVERBOSE(S,M)  ((S)->debug & (M))
  314 #else
  315 #define VERBOSE(S,M,F)
  316 #define VERBERR(S,M,F)
  317 #define ISVERBOSE(S,M)  (0)
  318 #endif

Cache object: 5676a447578039492a43e5d443f713a5


[ 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.