diff options
author | cmetz <cmetz@cvs.openbsd.org> | 1999-02-24 04:43:19 +0000 |
---|---|---|
committer | cmetz <cmetz@cvs.openbsd.org> | 1999-02-24 04:43:19 +0000 |
commit | b55f0c27decc0b0a255a2833bb62cc446fb041e6 (patch) | |
tree | 231391b5aeb2d087d8736b8ab0629a78a6d39af4 /sys/netinet6/osdep.h | |
parent | c880b04c53299e942c1be22d21ce035dfba9ef0c (diff) |
Added extra files
Diffstat (limited to 'sys/netinet6/osdep.h')
-rw-r--r-- | sys/netinet6/osdep.h | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/sys/netinet6/osdep.h b/sys/netinet6/osdep.h new file mode 100644 index 00000000000..13f87c7c9e2 --- /dev/null +++ b/sys/netinet6/osdep.h @@ -0,0 +1,260 @@ +/* +%%% copyright-nrl-97 +This software is Copyright 1997-1998 by Randall Atkinson, Ronald Lee, +Daniel McDonald, Bao Phan, and Chris Winters. All Rights Reserved. All +rights under this copyright have been assigned to the US Naval Research +Laboratory (NRL). The NRL Copyright Notice and License Agreement Version +1.1 (January 17, 1995) applies to this software. +You should have received a copy of the license with this software. If you +didn't get a copy, you may request one from <license@ipv6.nrl.navy.mil>. + +%%% copyright-cmetz-97 +This software is Copyright 1997-1998 by Craig Metz, All Rights Reserved. +The Inner Net License Version 2 applies to this software. +You should have received a copy of the license with this software. If +you didn't get a copy, you may request one from <license@inner.net>. + +*/ +#ifndef __OSDEP_H +#define __OSDEP_H 1 + +#if __linux__ +#ifdef __KERNEL__ +#define KERNEL 1 +#include <linux/types.h> +#include <linux/kernel.h> +#include <linux/socket.h> +#include <net/sock.h> +#include <linux/random.h> +#include <asm/uaccess.h> +#include <linux/malloc.h> + +#define printf printk + +/* XXX */ +#define OSDEP_CRITICALDCL unsigned long flags; +#define OSDEP_CRITICALSTART save_flags(flags); cli() +#define OSDEP_CRITICALEND restore_flags(flags) + +#define OSDEP_TIMESECONDS (xtime.tv_sec) + +#define OSDEP_PROCESS struct task_struct +#define OSDEP_PROCESSCURRENT (current) +#define OSDEP_PROCESSPARENT(x) ((x)->p_pptr) +#define OSDEP_PROCESSPID(x) ((x)->pid) + +#define OSDEP_PCAST(x) ((unsigned int)(x) & 0xffffffff) +#define OSDEP_SOCKET struct sock +#define OSDEP_PACKET struct sk_buff +struct sk_buff; + +#define OSDEP_REAL_MALLOC(n) kmalloc(n, GFP_ATOMIC) +#define OSDEP_REAL_FREE(p) kfree(p) + +#define OSDEP_SOCKETFAMILY(socket) (socket->family) +#define OSDEP_SOCKETPRIVELEGED(socket) (suser()) + +static inline uint32_t __osdep_pseudorandom(void) +{ + static uint32_t seed=152; + seed=seed*69069+1; + return seed^jiffies; +}; +#define OSDEP_PSEUDORANDOM __osdep_pseudorandom() + +static inline int __osdep_datatopacket(void *data, int len, OSDEP_PACKET **packet) +{ + if (!(*packet = alloc_skb(len, GFP_ATOMIC))) + return -ENOMEM; + + memcpy((*packet)->h.raw = skb_put(*packet, len), data, len); + + return 0; +}; +#define OSDEP_DATATOPACKET(data, len, packet) __osdep_datatopacket(data, len, packet) +#define OSDEP_ZEROPACKET(packet) memset(packet->head, 0, packet->end - packet->head) +#define OSDEP_FREEPACKET(packet) kfree_skb(packet) + +#define OSDEP_COPYFROMUSER(dst, src, len) \ + (copy_from_user(dst, src, len) ? -EFAULT : 0) + +#define OSDEP_COPYTOUSER(dst, src, len) \ + (copy_to_user(dst, src, len) ? -EFAULT : 0) + +#define __P(x) x +#else /* __KERNEL__ */ +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <errno.h> +#endif /* __KERNEL__ */ + +#define OSDEP_SALEN 0 +#define OSDEP_ERROR(x) (-(x)) + +#ifndef IN6_IS_ADDR_UNSPECIFIED +#define IN6_IS_ADDR_UNSPECIFIED(a) \ + ((((uint32_t *)(a))[0] == 0) && (((uint32_t *)(a))[1] == 0) && \ + (((uint32_t *)(a))[2] == 0) && (((uint32_t *)(a))[3] == 0)) +#endif /* IN6_IS_ADDR_UNSPECIFIED */ + +/* Stupid C trick: We can define the structures that are members of union + sockaddr_union as empty and later redefine them as non-empty. We CAN'T, + however, define them as non-empty and later redefine them as empty. So + the empty declarations must be wrapped to ensure that we don't do that. + + WARNING: gcc < 2.8 generates incorrect debugging information for this; + the symptom is that gdb thinks that all struct sockaddr_*'s are empty + structures. gcc >= 2.8 correctly figures out what's going on. - cmetz +*/ + +#ifdef KERNEL +#ifndef _NETINET_IN_H_ +/* struct sockaddr_in {}; */ +#endif /* _NETINET_IN_H_ */ +#ifndef _NETINET6_IN6_H +/* struct sockaddr_in6 {}; */ +#endif /* _NETINET6_IN6_H */ +#ifndef _SYS_UN_H_ +struct sockaddr_un {}; +#endif /* _SYS_UN_H_ */ + +union sockaddr_union { + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; + struct sockaddr_un sun; + char __maxsize[128]; /* should probably be MHLEN on BSD */ +}; + +static inline uint8_t __osdep_sa_len(struct sockaddr *sockaddr) +{ + switch(sockaddr->sa_family) { + case AF_INET: + return 16; /* sizeof(struct sockaddr_in); */ + case AF_INET6: + return 24; /* sizeof(struct sockaddr_in6); */ + default: + return 0; + }; +}; +#define SA_LEN(sockaddr) __osdep_sa_len(sockaddr) +#endif /* KERNEL */ +#endif /* __linux__ */ + +#if __NetBSD__ || __bsdi__ || __OpenBSD__ || __FreeBSD__ +#define OSDEP_BSD 1 + +#include <sys/types.h> +#include <sys/param.h> +#include <sys/socket.h> +#ifdef KERNEL +#ifndef ATSH_ADD +#include <sys/systm.h> +#endif /* ATSH_ADD */ +#ifndef MLEN +#include <sys/mbuf.h> +#endif /* MLEN */ +#include <sys/kernel.h> +#include <sys/malloc.h> +#ifndef SB_MAX +#include <sys/socketvar.h> +#endif /* SB_MAX */ +#include <sys/proc.h> +#ifndef RTM_RTTUNIT +#include <net/route.h> +#endif /* RTM_RTTUNIT */ +#endif /* KERNEL */ +struct ifnet; +struct mbuf; +#include <netinet/in.h> +struct route6; + +#ifdef KERNEL +/* XXX */ +#define OSDEP_CRITICALDCL int __s; +#define OSDEP_CRITICALSTART __s = splnet() +#define OSDEP_CRITICALEND splx(__s) + +#ifdef __FreeBSD__ +#define OSDEP_TIMESECONDS (time_second) +#else /* __FreeBSD__ */ +#define OSDEP_TIMESECONDS (time.tv_sec) +#endif /* __FreeBSD__ */ + +#define OSDEP_PROCESS struct proc +#if !defined(_BSDI_VERSION) || (_BSDI_VERSION < 199802) +#define OSDEP_PROCESSCURRENT (curproc) +#else /* !defined(_BSDI_VERSION) || (_BSDI_VERSION < 199802) */ +#include <machine/pcpu.h> +#define OSDEP_PROCESSCURRENT (PCPU(curproc)) +#endif /* !defined(_BSDI_VERSION) || (_BSDI_VERSION < 199802) */ +#define OSDEP_PROCESSPARENT(x) ((x)->p_pptr) +#define OSDEP_PROCESSPID(x) ((x)->p_pid) + +#ifdef SS_PRIV +#define OSDEP_SOCKETPRIVELEGED(socket) (socket->so_state & SS_PRIV) +#else /* SS_PRIV */ +/* XXX? */ +#define OSDEP_SOCKETPRIVELEGED(socket) (!curproc || !curproc->p_ucred || !curproc->p_ucred->cr_uid) +#endif /* SS_PRIV */ +#define OSDEP_PCAST(x) ((unsigned int)(x) & 0xffffffff) +#define OSDEP_SOCKET struct socket +#define OSDEP_PACKET struct mbuf +struct mbuf; + +#define OSDEP_REAL_MALLOC(n) malloc((unsigned long)(n), M_TEMP, M_DONTWAIT) +#define OSDEP_REAL_FREE(p) free((void *)p, M_TEMP) +#define OSDEP_FAMILY(socket) (socket->so_proto->pr_domain->dom_family) +#define OSDEP_PSEUDORANDOM (uint32_t)random() + +#if !__FreeBSD__ +struct ifnet; +struct mbuf *m_devget(char *, int, int, struct ifnet *, void (*)(const void *, void *, size_t)); +#endif /* !__FreeBSD__ */ + +static __inline__ int __osdep_datatopacket(void *data, int len, OSDEP_PACKET **packet) +{ + if (!(*packet = m_devget(data, len, 0, NULL, NULL))) + return -ENOMEM; + + return 0; +}; + +#define OSDEP_DATATOPACKET(data, len, packet) __osdep_datatopacket(data, len, packet) + +#define OSDEP_ZEROPACKET(packet) m_zero(packet) +#define OSDEP_FREEPACKET(packet) m_freem(packet) + +#define memcpy(dst, src, len) bcopy(src, dst, len) +#define memmove(dst, src, len) bcopy(src, dst, len) +#define memset(p, zero, len) bzero(p, len) /* XXX */ +#define memcmp(p1, p2, len) bcmp(p1, p2, len) + +#define OSDEP_COPYFROMUSER(dst, src, len) copyin(src, dst, len) +#define OSDEP_COPYTOUSER(dst, src, len) copyout(src, dst, len) + +#if __FreeBSD__ +#define M_SOCKET M_TEMP +#define MT_SOOPTS MT_DATA +#endif /* __FreeBSD__ */ +#endif /* KERNEL */ +#define OSDEP_SALEN 1 +#define OSDEP_ERROR(x) (x) +#endif /* __NetBSD__ || __bsdi__ || __OpenBSD__ || __FreeBSD__ */ + +#define ENETSECURITYPOLICY -ECOMM + +#ifdef DEBUG_MALLOC +#undef OSDEP_MALLOC +#undef OSDEP_FREE +#define OSDEP_MALLOC(n) debug_malloc_malloc(n, DEBUG_STATUS) +#define OSDEP_FREE(p) debug_malloc_free(p) +#else /* DEBUG_MALLOC */ +#undef OSDEP_MALLOC +#define OSDEP_MALLOC(n) OSDEP_REAL_MALLOC(n) +#undef OSDEP_FREE +#define OSDEP_FREE(p) OSDEP_REAL_FREE(p) +#endif /* DEBUG_MALLOC */ + +#endif /* __OSDEP_H */ |