need time.h if no user.h
[unix-history] / usr / src / sys / netinet / in_pcb.h
index 3fa2d05..334e19c 100644 (file)
@@ -1,9 +1,20 @@
 /*
 /*
- * Copyright (c) 1982 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1982, 1986, 1990 Regents of the University of California.
+ * All rights reserved.
  *
  *
- *     @(#)in_pcb.h    6.2 (Berkeley) %G%
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)in_pcb.h    7.5 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -25,12 +36,39 @@ struct inpcb {
        struct  socket *inp_socket;     /* back pointer to socket */
        caddr_t inp_ppcb;               /* pointer to per-protocol pcb */
        struct  route inp_route;        /* placeholder for routing entry */
        struct  socket *inp_socket;     /* back pointer to socket */
        caddr_t inp_ppcb;               /* pointer to per-protocol pcb */
        struct  route inp_route;        /* placeholder for routing entry */
+       int     inp_flags;              /* generic IP/datagram flags */
+       struct  ip inp_ip;              /* header prototype; should have more */
+       struct  mbuf *inp_options;      /* IP options */
 };
 
 };
 
+/* flags in inp_flags: */
+#define        INP_RECVOPTS            0x01    /* receive incoming IP options */
+#define        INP_RECVRETOPTS         0x02    /* receive IP options for reply */
+#define        INP_RECVDSTADDR         0x04    /* receive IP dst address */
+#define        INP_CONTROLOPTS         (INP_RECVOPTS|INP_RECVRETOPTS|INP_RECVDSTADDR)
+
+#ifdef sotorawcb
+/*
+ * Common structure pcb for raw internet protocol access.
+ * Here are internet specific extensions to the raw control block,
+ * and space is allocated to the necessary sockaddrs.
+ */
+struct raw_inpcb {
+       struct  rawcb rinp_rcb; /* common control block prefix */
+       struct  mbuf *rinp_options;     /* IP options */
+       int     rinp_flags;             /* flags, e.g. raw sockopts */
+#define        RINPF_HDRINCL   0x1             /* user supplies entire IP header */
+       struct  sockaddr_in rinp_faddr; /* foreign address */
+       struct  sockaddr_in rinp_laddr; /* local address */
+       struct  route rinp_route;       /* placeholder for routing entry */
+};
+#endif
+
 #define        INPLOOKUP_WILDCARD      1
 #define        INPLOOKUP_SETLOCAL      2
 
 #define        sotoinpcb(so)   ((struct inpcb *)(so)->so_pcb)
 #define        INPLOOKUP_WILDCARD      1
 #define        INPLOOKUP_SETLOCAL      2
 
 #define        sotoinpcb(so)   ((struct inpcb *)(so)->so_pcb)
+#define        sotorawinpcb(so)        ((struct raw_inpcb *)(so)->so_pcb)
 
 #ifdef KERNEL
 struct inpcb *in_pcblookup();
 
 #ifdef KERNEL
 struct inpcb *in_pcblookup();