cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dn_nsp.h (5524B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2#ifndef _NET_DN_NSP_H
      3#define _NET_DN_NSP_H
      4/******************************************************************************
      5    (c) 1995-1998 E.M. Serrat		emserrat@geocities.com
      6    
      7*******************************************************************************/
      8/* dn_nsp.c functions prototyping */
      9
     10void dn_nsp_send_data_ack(struct sock *sk);
     11void dn_nsp_send_oth_ack(struct sock *sk);
     12void dn_send_conn_ack(struct sock *sk);
     13void dn_send_conn_conf(struct sock *sk, gfp_t gfp);
     14void dn_nsp_send_disc(struct sock *sk, unsigned char type,
     15		      unsigned short reason, gfp_t gfp);
     16void dn_nsp_return_disc(struct sk_buff *skb, unsigned char type,
     17			unsigned short reason);
     18void dn_nsp_send_link(struct sock *sk, unsigned char lsflags, char fcval);
     19void dn_nsp_send_conninit(struct sock *sk, unsigned char flags);
     20
     21void dn_nsp_output(struct sock *sk);
     22int dn_nsp_check_xmit_queue(struct sock *sk, struct sk_buff *skb,
     23			    struct sk_buff_head *q, unsigned short acknum);
     24void dn_nsp_queue_xmit(struct sock *sk, struct sk_buff *skb, gfp_t gfp,
     25		       int oob);
     26unsigned long dn_nsp_persist(struct sock *sk);
     27int dn_nsp_xmit_timeout(struct sock *sk);
     28
     29int dn_nsp_rx(struct sk_buff *);
     30int dn_nsp_backlog_rcv(struct sock *sk, struct sk_buff *skb);
     31
     32struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri);
     33struct sk_buff *dn_alloc_send_skb(struct sock *sk, size_t *size, int noblock,
     34				  long timeo, int *err);
     35
     36#define NSP_REASON_OK 0		/* No error */
     37#define NSP_REASON_NR 1		/* No resources */
     38#define NSP_REASON_UN 2		/* Unrecognised node name */
     39#define NSP_REASON_SD 3		/* Node shutting down */
     40#define NSP_REASON_ID 4		/* Invalid destination end user */
     41#define NSP_REASON_ER 5		/* End user lacks resources */
     42#define NSP_REASON_OB 6		/* Object too busy */
     43#define NSP_REASON_US 7		/* Unspecified error */
     44#define NSP_REASON_TP 8		/* Third-Party abort */
     45#define NSP_REASON_EA 9		/* End user has aborted the link */
     46#define NSP_REASON_IF 10	/* Invalid node name format */
     47#define NSP_REASON_LS 11	/* Local node shutdown */
     48#define NSP_REASON_LL 32	/* Node lacks logical-link resources */
     49#define NSP_REASON_LE 33	/* End user lacks logical-link resources */
     50#define NSP_REASON_UR 34	/* Unacceptable RQSTRID or PASSWORD field */
     51#define NSP_REASON_UA 36	/* Unacceptable ACCOUNT field */
     52#define NSP_REASON_TM 38	/* End user timed out logical link */
     53#define NSP_REASON_NU 39	/* Node unreachable */
     54#define NSP_REASON_NL 41	/* No-link message */
     55#define NSP_REASON_DC 42	/* Disconnect confirm */
     56#define NSP_REASON_IO 43	/* Image data field overflow */
     57
     58#define NSP_DISCINIT 0x38
     59#define NSP_DISCCONF 0x48
     60
     61/*------------------------- NSP - messages ------------------------------*/
     62/* Data Messages */
     63/*---------------*/
     64
     65/* Data Messages    (data segment/interrupt/link service)               */
     66
     67struct nsp_data_seg_msg {
     68	__u8   msgflg;
     69	__le16 dstaddr;
     70	__le16 srcaddr;
     71} __packed;
     72
     73struct nsp_data_opt_msg {
     74	__le16 acknum;
     75	__le16 segnum;
     76	__le16 lsflgs;
     77} __packed;
     78
     79struct nsp_data_opt_msg1 {
     80	__le16 acknum;
     81	__le16 segnum;
     82} __packed;
     83
     84
     85/* Acknowledgment Message (data/other data)                             */
     86struct nsp_data_ack_msg {
     87	__u8   msgflg;
     88	__le16 dstaddr;
     89	__le16 srcaddr;
     90	__le16 acknum;
     91} __packed;
     92
     93/* Connect Acknowledgment Message */
     94struct  nsp_conn_ack_msg {
     95	__u8 msgflg;
     96	__le16 dstaddr;
     97} __packed;
     98
     99
    100/* Connect Initiate/Retransmit Initiate/Connect Confirm */
    101struct  nsp_conn_init_msg {
    102	__u8   msgflg;
    103#define NSP_CI      0x18            /* Connect Initiate     */
    104#define NSP_RCI     0x68            /* Retrans. Conn Init   */
    105	__le16 dstaddr;
    106	__le16 srcaddr;
    107	__u8   services;
    108#define NSP_FC_NONE   0x00            /* Flow Control None    */
    109#define NSP_FC_SRC    0x04            /* Seg Req. Count       */
    110#define NSP_FC_SCMC   0x08            /* Sess. Control Mess   */
    111#define NSP_FC_MASK   0x0c            /* FC type mask         */
    112	__u8   info;
    113	__le16 segsize;
    114} __packed;
    115
    116/* Disconnect Initiate/Disconnect Confirm */
    117struct  nsp_disconn_init_msg {
    118	__u8   msgflg;
    119	__le16 dstaddr;
    120	__le16 srcaddr;
    121	__le16 reason;
    122} __packed;
    123
    124
    125
    126struct  srcobj_fmt {
    127	__u8   format;
    128	__u8   task;
    129	__le16 grpcode;
    130	__le16 usrcode;
    131	__u8   dlen;
    132} __packed;
    133
    134/*
    135 * A collection of functions for manipulating the sequence
    136 * numbers used in NSP. Similar in operation to the functions
    137 * of the same name in TCP.
    138 */
    139static __inline__ int dn_before(__u16 seq1, __u16 seq2)
    140{
    141        seq1 &= 0x0fff;
    142        seq2 &= 0x0fff;
    143
    144        return (int)((seq1 - seq2) & 0x0fff) > 2048;
    145}
    146
    147
    148static __inline__ int dn_after(__u16 seq1, __u16 seq2)
    149{
    150        seq1 &= 0x0fff;
    151        seq2 &= 0x0fff;
    152
    153        return (int)((seq2 - seq1) & 0x0fff) > 2048;
    154}
    155
    156static __inline__ int dn_equal(__u16 seq1, __u16 seq2)
    157{
    158        return ((seq1 ^ seq2) & 0x0fff) == 0;
    159}
    160
    161static __inline__ int dn_before_or_equal(__u16 seq1, __u16 seq2)
    162{
    163	return (dn_before(seq1, seq2) || dn_equal(seq1, seq2));
    164}
    165
    166static __inline__ void seq_add(__u16 *seq, __u16 off)
    167{
    168        (*seq) += off;
    169        (*seq) &= 0x0fff;
    170}
    171
    172static __inline__ int seq_next(__u16 seq1, __u16 seq2)
    173{
    174	return dn_equal(seq1 + 1, seq2);
    175}
    176
    177/*
    178 * Can we delay the ack ?
    179 */
    180static __inline__ int sendack(__u16 seq)
    181{
    182        return (int)((seq & 0x1000) ? 0 : 1);
    183}
    184
    185/*
    186 * Is socket congested ?
    187 */
    188static __inline__ int dn_congested(struct sock *sk)
    189{
    190        return atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1);
    191}
    192
    193#define DN_MAX_NSP_DATA_HEADER (11)
    194
    195#endif /* _NET_DN_NSP_H */