diff options
Diffstat (limited to 'sys/netinet/sctp_os_bsd.h')
| -rw-r--r-- | sys/netinet/sctp_os_bsd.h | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/sys/netinet/sctp_os_bsd.h b/sys/netinet/sctp_os_bsd.h index 9b557a2bb97a..d355324756f9 100644 --- a/sys/netinet/sctp_os_bsd.h +++ b/sys/netinet/sctp_os_bsd.h @@ -37,7 +37,6 @@ __FBSDID("$FreeBSD$"); */ #include <sys/random.h> - /* * */ @@ -85,8 +84,74 @@ typedef struct uma_zone *sctp_zone_t; uma_zfree(zone, element); /* + * timers + */ +#include <sys/callout.h> +typedef struct callout sctp_os_timer_t; + +#define SCTP_OS_TIMER_INIT(tmr) callout_init(tmr, 1) +#define SCTP_OS_TIMER_START callout_reset +#define SCTP_OS_TIMER_STOP callout_stop +#define SCTP_OS_TIMER_PENDING callout_pending +#define SCTP_OS_TIMER_ACTIVE callout_active +#define SCTP_OS_TIMER_DEACTIVATE callout_deactivate + +/* * Functions */ -#define sctp_read_random(buf, len) read_random(buf, len) +#define SCTP_READ_RANDOM(buf, len) read_random(buf, len) + +/* Mbuf manipulation and access macros */ +#define SCTP_BUF_LEN(m) (m->m_len) +#define SCTP_BUF_NEXT(m) (m->m_next) +#define SCTP_BUF_NEXT_PKT(m) (m->m_nextpkt) +#define SCTP_BUF_RESV_UF(m, size) m->m_data += size +#define SCTP_BUF_AT(m, size) m->m_data + size +#define SCTP_BUF_IS_EXTENDED(m) (m->m_flags & M_EXT) +#define SCTP_BUF_EXTEND_SIZE(m) (m->m_ext.ext_size) +#define SCTP_BUF_TYPE(m) (m->m_type) +#define SCTP_BUF_RECVIF(m) (m->m_pkthdr.rcvif) +#define SCTP_BUF_PREPEND M_PREPEND +/*************************/ +/* These are for logging */ +/*************************/ +/* return the base ext data pointer */ +#define SCTP_BUF_EXTEND_BASE(m) (m->m_ext.ext_buf) + /* return the refcnt of the data pointer */ +#define SCTP_BUF_EXTEND_REFCNT(m) (*m->m_ext.ref_cnt) +/* return any buffer related flags, this is + * used beyond logging for apple only. + */ +#define SCTP_BUF_GET_FLAGS(m) (m->m_flags) + +/* For BSD this just accesses the M_PKTHDR length + * so it operates on an mbuf with hdr flag. Other + * O/S's may have seperate packet header and mbuf + * chain pointers.. thus the macro. + */ +#define SCTP_HEADER_TO_CHAIN(m) (m) +#define SCTP_HEADER_LEN(m) (m->m_pkthdr.len) +#define SCTP_GET_HEADER_FOR_OUTPUT(len) sctp_get_mbuf_for_msg(len, 1, M_DONTWAIT, 1, MT_DATA) + +/* Attach the chain of data into the sendable packet. */ +#define SCTP_ATTACH_CHAIN(pak, m, packet_length) do { \ + pak->m_next = m; \ + pak->m_pkthdr.len = packet_length; \ + } while(0) + +/* Other m_pkthdr type things */ +#define SCTP_IS_IT_BROADCAST(dst, m) in_broadcast(dst, m->m_pkthdr.rcvif) +#define SCTP_IS_IT_LOOPBACK(m) ((m->m_pkthdr.rcvif == NULL) ||(m->m_pkthdr.rcvif->if_type == IFT_LOOP)) + + +/* This converts any input packet header + * into the chain of data holders, for BSD + * its a NOP. + */ +#define SCTP_PAK_TO_BUF(i_pak) (i_pak) + +/* Macro's for getting length from V6/V4 header */ +#define SCTP_GET_IPV4_LENGTH(iph) (iph->ip_len) +#define SCTP_GET_IPV6_LENGTH(ip6) (ntohs(ip6->ip6_plen)) #endif |
