parlib: Fix fake parlib detection for dlopen() (XCC)
[akaros.git] / kern / include / ip.h
index 2eb6e3c..2f0a0f2 100644 (file)
@@ -64,6 +64,13 @@ enum {
        Announced = 2,
        Connecting = 3,
        Connected = 4,
+       Bypass = 5,
+};
+
+enum {
+       SHUT_RD = 0,
+       SHUT_WR = 1,
+       SHUT_RDWR = 2,
 };
 
 /*
@@ -80,7 +87,6 @@ struct conv {
        uint32_t ttl;                           /* max time to live */
        uint32_t tos;                           /* type of service */
        int ignoreadvice;                       /* don't terminate connection on icmp errors */
-       bool nonblock;                          /* set to nonblocking, O_NONBLOCK style */
 
        uint8_t ipversion;
        uint8_t laddr[IPaddrlen];       /* local IP address */
@@ -93,6 +99,8 @@ struct conv {
        int inuse;                                      /* opens of listen/data/ctl */
        int length;
        int state;
+       struct queue *rq_save;          /* rq created by proto, saved during bypass */
+       struct queue *wq_save;          /* wq created by proto, saved during bypass */
 
        /* udp specific */
        int headers;                            /* data src/dst headers in udp */
@@ -236,10 +244,11 @@ struct Ipifc {
 
        uint32_t in, out;                       /* message statistics */
        uint32_t inerr, outerr;         /* ... */
+       uint32_t tracedrop;
 
        uint8_t sendra6;                        /* == 1 => send router advs on this ifc */
        uint8_t recvra6;                        /* == 1 => recv router advs on this ifc */
-       struct routerparams rp;         /* router parameters as in RFC 2461, pp.40--43. 
+       struct routerparams rp;         /* router parameters as in RFC 2461, pp.40--43.
                                                                   used only if node is router */
 };
 
@@ -279,6 +288,7 @@ void iphtadd(struct Ipht *, struct conv *);
 void iphtrem(struct Ipht *, struct conv *);
 struct conv *iphtlook(struct Ipht *ht, uint8_t * sa, uint16_t sp, uint8_t * da,
                                          uint16_t dp);
+void dump_ipht(struct Ipht *ht);
 
 /*
  *  one per multiplexed Protocol
@@ -289,21 +299,22 @@ struct Proto {
        int x;                                          /* protocol index */
        int ipproto;                            /* ip protocol type */
 
-       char *(*connect) (struct conv *, char **unused_char_pp_t, int);
-       char *(*announce) (struct conv *, char **unused_char_pp_t, int);
-       char *(*bind) (struct conv *, char **unused_char_pp_t, int);
+       void (*connect)(struct conv *, char **, int);
+       void (*announce)(struct conv *, char **, int);
+       void (*bind)(struct conv *, char **, int);
+       void (*bypass)(struct conv *, char **, int);
        int (*state) (struct conv *, char *unused_char_p_t, int);
        void (*create) (struct conv *);
        void (*close) (struct conv *);
+       void (*shutdown)(struct conv *, int);
        void (*rcv) (struct Proto *, struct Ipifc *, struct block *);
-       char *(*ctl) (struct conv *, char **unused_char_pp_t, int);
+       void (*ctl)(struct conv *, char **, int);
        void (*advise) (struct Proto *, struct block *, char *unused_char_p_t);
        int (*stats) (struct Proto *, char *unused_char_p_t, int);
        int (*local) (struct conv *, char *unused_char_p_t, int);
        int (*remote) (struct conv *, char *unused_char_p_t, int);
        int (*inuse) (struct conv *);
        int (*gc) (struct Proto *);     /* returns true if any conversations are freed */
-       void (*newconv) (struct Proto * udp, struct conv * conv);
 
        struct Fs *f;                           /* file system this proto is part of */
        struct conv **conv;                     /* array of conversations */
@@ -388,13 +399,14 @@ int Fsbuiltinproto(struct Fs *, uint8_t unused_uint8_t);
 struct conv *Fsprotoclone(struct Proto *, char *unused_char_p_t);
 struct Proto *Fsrcvpcol(struct Fs *, uint8_t unused_uint8_t);
 struct Proto *Fsrcvpcolx(struct Fs *, uint8_t unused_uint8_t);
-char *Fsstdconnect(struct conv *, char **unused_char_pp_t, int);
-char *Fsstdannounce(struct conv *, char **unused_char_pp_t, int);
-char *Fsstdbind(struct conv *, char **unused_char_pp_t, int);
-void Fsconvnonblock(struct conv *, bool);
+void Fsstdconnect(struct conv *, char **, int);
+void Fsstdannounce(struct conv *, char **, int);
+void Fsstdbypass(struct conv *, char **, int);
+void Fsstdbind(struct conv *, char **, int);
 uint32_t scalednconv(void);
+void bypass_or_drop(struct conv *cv, struct block *bp);
 
-/* 
+/*
  *  logging
  */
 enum {
@@ -415,7 +427,8 @@ enum {
        Logrudp = 1 << 15,
        Logrudpmsg = 1 << 16,
        Logesp = 1 << 17,
-       Logtcpwin = 1 << 18,
+       Logtcpreset = 1 << 18,
+       Logtcpverbose = 1 << 19,
 };
 
 void netloginit(struct Fs *);
@@ -588,6 +601,8 @@ static inline long ipcmp(unsigned char *x, unsigned char *y)
 }
 
 
+extern uint8_t IPv4_loopback[IPaddrlen];
+extern uint8_t IPv4_zeroes[IPaddrlen];
 extern uint8_t IPv4bcast[IPaddrlen];
 extern uint8_t IPv4bcastobs[IPaddrlen];
 extern uint8_t IPv4allsys[IPaddrlen];
@@ -633,11 +648,8 @@ extern void ipifcremroute(struct Fs *, int unused_int, uint8_t * u8pt,
                                                  uint8_t * u8pt2);
 extern void ipifcremmulti(struct conv *c, uint8_t * ma, uint8_t * ia);
 extern void ipifcaddmulti(struct conv *c, uint8_t * ma, uint8_t * ia);
-extern char *ipifcrem(struct Ipifc *ifc, char **argv, int argc);
-extern char *ipifcadd(struct Ipifc *ifc, char **argv, int argc, int tentative,
-                                         struct Iplifc *lifcp);
+extern void ipifc_trace_block(struct Ipifc *ifc, struct block *bp);
 extern long ipselftabread(struct Fs *, char *a, uint32_t offset, int n);
-extern char *ipifcaddpref6(struct Ipifc *ifc, char **argv, int argc);
 extern void ipsendra6(struct Fs *f, int on);
 
 /*
@@ -683,12 +695,6 @@ static inline void ptclcsum_finalize(struct block *bp, unsigned int feat)
 }
 
 /*
- * bootp.c
- */
-char *(*bootp) (struct Ipifc * unused_ipifc);
-int (*bootpread) (char *unused_char_p_t, uint32_t, int);
-
-/*
  *  iprouter.c
  */
 void useriprouter(struct Fs *, struct Ipifc *unused_ipifc, struct block *);