#ifndef _NET_SIP_H
#define _NET_SIP_H
#include <net/if.h>
#include <netat/appletalk.h>
#define SIP_DEBUG_FLOW 0
#define SIP_DEBU 0
#define SIP_DEBUG_ERR 1
#define SIP_DEBUG_INFO 0
#define DO_LOG 0
#define SharedIP_Handle 0xfeedface
#define FILTER_LEN 28
struct BlueFilter {
unsigned long BF_address;
unsigned char BF_node;
short BF_flags;
};
#define BFS_ATALK 0
#define BFS_IP 1
#define BFS_COUNT 2
struct blueCtlBlock {
struct blueCtlBlock *bcb_link;
struct socket *ifb_so;
struct BlueFilter filter[BFS_COUNT];
struct sockaddr_at XAtalkAddr;
int ClosePending;
unsigned char *dev_media_addr;
int media_addr_size;
unsigned char udp_blue_owned;
unsigned char tcp_blue_owned;
unsigned long atalk_proto_filter_id;
unsigned long ipv4_proto_filter_id;
unsigned long lo_proto_filter_id;
int ipv4_stopping;
int atalk_stopping;
TAILQ_HEAD(fraglist, fraghead) fraglist;
int fraglist_timer_on;
int pkts_up;
int pkts_out;
int pkts_looped_r2b;
int pkts_looped_b2r;
int no_bufs1;
int no_bufs2;
int full_sockbuf;
};
#define MDATA_INCLUDE_HEADER(_m, _size) { \
(_m)->m_data -= _size; \
(_m)->m_len += _size; \
(_m)->m_pkthdr.len += _size; }
#define MDATA_REMOVE_HEADER(_m, _size) { \
(_m)->m_data += _size; \
(_m)->m_len -= _size; \
(_m)->m_pkthdr.len -= _size; }
#define MDATA_ETHER_START(m) { \
(m)->m_data -= sizeof(struct ether_header); \
(m)->m_len += sizeof (struct ether_header); \
(m)->m_pkthdr.len += sizeof(struct ether_header); \
}
#define MDATA_ETHER_END(m) { \
(m)->m_data += sizeof(struct ether_header); \
(m)->m_len -= sizeof (struct ether_header); \
(m)->m_pkthdr.len -= sizeof(struct ether_header); \
}
#define mtodAtOffset(_m, _offset, _type) ((_type)(mtod(_m, unsigned char*) + _offset))
#ifdef KERNEL
extern int enable_atalk(struct BlueFilter *, void *, struct blueCtlBlock *);
extern int atalk_attach_protofltr(struct ifnet *, struct blueCtlBlock *);
extern int ipv4_attach_protofltr(struct ifnet *, struct blueCtlBlock *);
extern int enable_ipv4(struct BlueFilter *, void *, struct blueCtlBlock *);
extern int atalk_stop(struct blueCtlBlock *);
extern int ipv4_stop(struct blueCtlBlock *);
extern int ipv4_control(struct socket *, struct sopt_shared_port_param *,
struct kextcb *, int);
extern int blue_inject(struct blueCtlBlock *, struct mbuf *);
extern struct mbuf *m_dup(struct mbuf *, int);
extern int my_frameout(struct mbuf **, struct ifnet *, char *, char *);
extern int ether_attach_ip(struct ifnet *, unsigned long *, unsigned long *);
extern int ether_attach_at(struct ifnet *, unsigned long *, unsigned long *);
extern int ether_detach_at(struct ifnet *);
extern void release_ifb(struct blueCtlBlock *);
extern int si_send_eth_atalk(struct mbuf **, struct blueCtlBlock *);
extern int si_send_eth_ipv4(struct mbuf **, struct blueCtlBlock *, struct ifnet *ifp);
extern int si_send_ppp_ipv4(struct mbuf **, struct blueCtlBlock *, struct ifnet *ifp);
extern void init_ipv4(struct socket *, struct kextcb *);
extern void timeout(timeout_fcn_t, void *, int);
extern int do_pullup(struct mbuf**, unsigned int);
#endif
#endif