webkit
2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
|
#include <errno.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>
#include <user_queue.h>
#include <user_malloc.h>
#include "user_socketvar.h"
#include <user_environment.h>
#include <user_atomic.h>
#include <user_mbuf.h>
#include <net/if.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <user_ip_icmp.h>
#include <user_inpcb.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stddef.h>
#include "netinet/sctp_sha1.h"
#include "user_include/umem.h"
#include <netinet/sctp_callout.h>
#include <user_recv_thread.h>
#include <netinet/sctp.h>
Go to the source code of this file.
Classes | |
struct | mtx |
struct | selinfo |
struct | sx |
struct | sockaddr_conn |
Macros | |
#define | mtx_lock(arg1) |
#define | mtx_unlock(arg1) |
#define | mtx_assert(arg1, arg2) |
#define | MA_OWNED 7 /* sys/mutex.h typically on FreeBSD */ |
#define | SCTP_PRINTF(...) |
#define | SCTP_CTR6 CTR6 |
#define | CTR6(m, d, p1, p2, p3, p4, p5, p6) |
#define | SCTP_BASE_INFO(__m) system_base_info.sctppcbinfo.__m |
#define | SCTP_BASE_STATS system_base_info.sctpstat |
#define | SCTP_BASE_STAT(__m) system_base_info.sctpstat.__m |
#define | SCTP_BASE_SYSCTL(__m) system_base_info.sctpsysctl.__m |
#define | SCTP_BASE_VAR(__m) system_base_info.__m |
#define | USER_ADDR_NULL (NULL) /* FIX ME: temp */ |
#define | SCTPDBG(level, ...) |
#define | SCTPDBG_ADDR(level, addr) |
#define | SCTP_LTRACE_CHK(a, b, c, d) |
#define | SCTP_LTRACE_ERR_RET_PKT(m, inp, stcb, net, file, err) |
#define | SCTP_LTRACE_ERR_RET(inp, stcb, net, file, err) |
#define | SCTP_MAX_VRF_ID 0 |
#define | SCTP_SIZE_OF_VRF_HASH 3 |
#define | SCTP_IFNAMSIZ IFNAMSIZ |
#define | SCTP_DEFAULT_VRFID 0 |
#define | SCTP_VRF_ADDR_HASH_SIZE 16 |
#define | SCTP_VRF_IFN_HASH_SIZE 3 |
#define | SCTP_INIT_VRF_TABLEID(vrf) |
#define | SCTP_IFN_IS_IFT_LOOP(ifn) (strncmp((ifn)->ifn_name, "lo", 2) == 0) |
#define | SCTP_ROUTE_IS_REAL_LOOP(ro) 0 |
#define | SCTP_GET_IFN_VOID_FROM_ROUTE(ro) (void *)ro->ro_rt->rt_ifp |
#define | SCTP_GET_IF_INDEX_FROM_ROUTE(ro) 1 /* compiles... TODO use routing socket to determine */ |
#define | SCTP_ROUTE_HAS_VALID_IFN(ro) ((ro)->ro_rt && (ro)->ro_rt->rt_ifp) |
#define | SCTP_MALLOC(var, type, size, name) |
#define | SCTP_FREE(var, type) FREE(var, type) |
#define | SCTP_MALLOC_SONAME(var, type, size) |
#define | SCTP_FREE_SONAME(var) FREE(var, M_SONAME) |
#define | SCTP_PROCESS_STRUCT struct proc * |
#define | SCTP_ZONE_INIT(zone, name, size, number) |
#define | SCTP_ZONE_GET(zone, type) (type *)umem_cache_alloc(zone, UMEM_DEFAULT); |
#define | SCTP_ZONE_FREE(zone, element) umem_cache_free(zone, element); |
#define | SCTP_ZONE_DESTROY(zone) umem_cache_destroy(zone); |
#define | HASH_NOWAIT 0x00000001 |
#define | HASH_WAITOK 0x00000002 |
#define | SCTP_HASH_INIT(size, hashmark) sctp_hashinit_flags(size, M_PCB, hashmark, HASH_NOWAIT) |
#define | SCTP_HASH_FREE(table, hashmark) sctp_hashdestroy(table, M_PCB, hashmark) |
#define | SCTP_HASH_FREE_DESTROY(table, hashmark) sctp_hashfreedestroy(table, M_PCB, hashmark) |
#define | SCTP_M_COPYM m_copym |
#define | KTR_SUBSYS 1 |
#define | SCTP_PACKED __attribute__((packed)) |
#define | SCTP_UNUSED __attribute__((unused)) |
#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 |
#define | SCTP_ALIGN_TO_END(m, len) |
#define | SCTP_PKTLOG_WRITERS_NEED_LOCK 3 |
#define | SCTP_RTALLOC(ro, vrf_id, fibnum) sctp_userspace_rtalloc((sctp_route_t *)ro) |
#define | rtfree(arg1) sctp_userspace_rtfree(arg1) |
#define | SCTP_GATHER_MTU_FROM_IFN_INFO(ifn, ifn_index, af) sctp_userspace_get_mtu_from_ifn(ifn_index, af) |
#define | SCTP_GATHER_MTU_FROM_ROUTE(sctp_ifa, sa, rt) ((rt != NULL) ? rt->rt_rmx.rmx_mtu : 0) |
#define | SCTP_GATHER_MTU_FROM_INTFC(sctp_ifn) sctp_userspace_get_mtu_from_ifn(if_nametoindex(((struct ifaddrs *) (sctp_ifn))->ifa_name), AF_INET) |
#define | SCTP_SET_MTU_OF_ROUTE(sa, rt, mtu) |
#define | SCTP_REGISTER_INTERFACE(ifhandle, af) |
#define | SCTP_DEREGISTER_INTERFACE(ifhandle, af) |
#define | SCTP_BUF_EXTEND_BASE(m) (m->m_ext.ext_buf) |
#define | SCTP_BUF_EXTEND_REFCNT(m) (*m->m_ext.ref_cnt) |
#define | SCTP_BUF_GET_FLAGS(m) (m->m_flags) |
#define | SCTP_HEADER_TO_CHAIN(m) (m) |
#define | SCTP_DETACH_HEADER_FROM_CHAIN(m) |
#define | SCTP_HEADER_LEN(m) ((m)->m_pkthdr.len) |
#define | SCTP_GET_HEADER_FOR_OUTPUT(o_pak) 0 |
#define | SCTP_RELEASE_HEADER(m) |
#define | SCTP_RELEASE_PKT(m) sctp_m_freem(m) |
#define | SCTP_GET_PKT_VRFID(m, vrf_id) ((vrf_id = SCTP_DEFAULT_VRFID) != SCTP_DEFAULT_VRFID) |
#define | SCTP_ATTACH_CHAIN(pak, m, packet_length) |
#define | SCTP_IS_IT_BROADCAST(dst, m) 0 |
#define | SCTP_IS_IT_LOOPBACK(m) 0 |
#define | SCTP_GET_HLIM(inp, ro) 128 /* As done for __Windows__ */ |
#define | IPv6_HOP_LIMIT 128 |
#define | SCTP_IPV6_V6ONLY(inp) (((struct inpcb *)inp)->inp_flags & IN6P_IPV6_V6ONLY) |
#define | SCTP_SO_IS_NBIO(so) ((so)->so_state & SS_NBIO) |
#define | SCTP_SET_SO_NBIO(so) ((so)->so_state |= SS_NBIO) |
#define | SCTP_CLEAR_SO_NBIO(so) ((so)->so_state &= ~SS_NBIO) |
#define | SCTP_SO_TYPE(so) ((so)->so_type) |
#define | SCTP_SORESERVE(so, send, recv) soreserve(so, send, recv) |
#define | SCTP_SOWAKEUP(so) wakeup(&(so)->so_timeo, so) |
#define | SCTP_SB_CLEAR(sb) |
#define | SCTP_SB_LIMIT_RCV(so) so->so_rcv.sb_hiwat |
#define | SCTP_SB_LIMIT_SND(so) so->so_snd.sb_hiwat |
#define | SCTP_ZERO_COPY_EVENT(inp, so) |
#define | SCTP_ZERO_COPY_SENDQ_EVENT(inp, so) |
#define | SCTP_READ_RANDOM(buf, len) read_random(buf, len) |
#define | SCTP_SHA1_CTX struct sctp_sha1_context |
#define | SCTP_SHA1_INIT sctp_sha1_init |
#define | SCTP_SHA1_UPDATE sctp_sha1_update |
#define | SCTP_SHA1_FINAL(x, y) sctp_sha1_final((unsigned char *)x, y) |
#define | IFT_LOOP 0x18 |
#define | PRU_FLUSH_RD SHUT_RD |
#define | PRU_FLUSH_WR SHUT_WR |
#define | PRU_FLUSH_RDWR SHUT_RDWR |
#define | IP_RAWOUTPUT 0x2 |
#define | AF_CONN 123 |
#define | M_NOTIFICATION M_PROTO5 /* SCTP notification */ |
#define | SCTP_IP_ID(inp) (ip_id) |
#define | SCTP_IP_OUTPUT(result, o_pak, ro, stcb, vrf_id) sctp_userspace_ip_output(&result, o_pak, ro, stcb, vrf_id); |
#define | I_AM_HERE |
#define | timevalsub(tp1, tp2) |
Typedefs | |
typedef pthread_mutex_t | userland_mutex_t |
typedef pthread_cond_t | userland_cond_t |
typedef pthread_t | userland_thread_t |
typedef struct sctp_route | sctp_route_t |
typedef struct sctp_rtentry | sctp_rtentry_t |
typedef void *(* | start_routine_t) (void *) |
Functions | |
MALLOC_DECLARE (SCTP_M_MAP) | |
MALLOC_DECLARE (SCTP_M_STRMI) | |
MALLOC_DECLARE (SCTP_M_STRMO) | |
MALLOC_DECLARE (SCTP_M_ASC_ADDR) | |
MALLOC_DECLARE (SCTP_M_ASC_IT) | |
MALLOC_DECLARE (SCTP_M_AUTH_CL) | |
MALLOC_DECLARE (SCTP_M_AUTH_KY) | |
MALLOC_DECLARE (SCTP_M_AUTH_HL) | |
MALLOC_DECLARE (SCTP_M_AUTH_IF) | |
MALLOC_DECLARE (SCTP_M_STRESET) | |
MALLOC_DECLARE (SCTP_M_CMSG) | |
MALLOC_DECLARE (SCTP_M_COPYAL) | |
MALLOC_DECLARE (SCTP_M_VRF) | |
MALLOC_DECLARE (SCTP_M_IFA) | |
MALLOC_DECLARE (SCTP_M_IFN) | |
MALLOC_DECLARE (SCTP_M_TIMW) | |
MALLOC_DECLARE (SCTP_M_MVRF) | |
MALLOC_DECLARE (SCTP_M_ITER) | |
MALLOC_DECLARE (SCTP_M_SOCKOPT) | |
void * | sctp_hashinit_flags (int elements, struct malloc_type *type, u_long *hashmask, int flags) |
void | sctp_hashdestroy (void *vhashtbl, struct malloc_type *type, u_long hashmask) |
void | sctp_hashfreedestroy (void *vhashtbl, struct malloc_type *type, u_long hashmask) |
int | sctp_userspace_get_mtu_from_ifn (uint32_t if_index, int af) |
int | sctp_userspace_thread_create (userland_thread_t *thread, start_routine_t start_routine) |
void | sctp_userspace_set_threadname (const char *name) |
void | sctp_userspace_ip_output (int *result, struct mbuf *o_pak, sctp_route_t *ro, void *stcb, uint32_t vrf_id) |
struct mbuf * | sctp_get_mbuf_for_msg (unsigned int space_needed, int want_header, int how, int allonebuf, int type) |
#define AF_CONN 123 |
#define HASH_NOWAIT 0x00000001 |
#define HASH_WAITOK 0x00000002 |
#define I_AM_HERE |
#define IFT_LOOP 0x18 |
#define IP_RAWOUTPUT 0x2 |
#define IPv6_HOP_LIMIT 128 |
#define KTR_SUBSYS 1 |
#define M_NOTIFICATION M_PROTO5 /* SCTP notification */ |
#define mtx_assert | ( | arg1, | |
arg2 | |||
) |
#define mtx_lock | ( | arg1 | ) |
#define mtx_unlock | ( | arg1 | ) |
#define PRU_FLUSH_RD SHUT_RD |
#define PRU_FLUSH_RDWR SHUT_RDWR |
#define PRU_FLUSH_WR SHUT_WR |
#define rtfree | ( | arg1 | ) | sctp_userspace_rtfree(arg1) |
#define SCTP_ATTACH_CHAIN | ( | pak, | |
m, | |||
packet_length | |||
) |
#define SCTP_BASE_INFO | ( | __m | ) | system_base_info.sctppcbinfo.__m |
#define SCTP_BASE_STAT | ( | __m | ) | system_base_info.sctpstat.__m |
#define SCTP_BASE_STATS system_base_info.sctpstat |
#define SCTP_BASE_SYSCTL | ( | __m | ) | system_base_info.sctpsysctl.__m |
#define SCTP_BASE_VAR | ( | __m | ) | system_base_info.__m |
#define SCTP_BUF_EXTEND_BASE | ( | m | ) | (m->m_ext.ext_buf) |
#define SCTP_BUF_EXTEND_REFCNT | ( | m | ) | (*m->m_ext.ref_cnt) |
#define SCTP_BUF_EXTEND_SIZE | ( | m | ) | (m->m_ext.ext_size) |
#define SCTP_BUF_PREPEND M_PREPEND |
#define SCTP_CLEAR_SO_NBIO | ( | so | ) | ((so)->so_state &= ~SS_NBIO) |
#define SCTP_CTR6 CTR6 |
#define SCTP_DEFAULT_VRFID 0 |
#define SCTP_DEREGISTER_INTERFACE | ( | ifhandle, | |
af | |||
) |
#define SCTP_DETACH_HEADER_FROM_CHAIN | ( | m | ) |
#define SCTP_FREE_SONAME | ( | var | ) | FREE(var, M_SONAME) |
#define SCTP_GATHER_MTU_FROM_IFN_INFO | ( | ifn, | |
ifn_index, | |||
af | |||
) | sctp_userspace_get_mtu_from_ifn(ifn_index, af) |
#define SCTP_GATHER_MTU_FROM_INTFC | ( | sctp_ifn | ) | sctp_userspace_get_mtu_from_ifn(if_nametoindex(((struct ifaddrs *) (sctp_ifn))->ifa_name), AF_INET) |
#define SCTP_GET_HEADER_FOR_OUTPUT | ( | o_pak | ) | 0 |
#define SCTP_GET_IFN_VOID_FROM_ROUTE | ( | ro | ) | (void *)ro->ro_rt->rt_ifp |
#define SCTP_GET_PKT_VRFID | ( | m, | |
vrf_id | |||
) | ((vrf_id = SCTP_DEFAULT_VRFID) != SCTP_DEFAULT_VRFID) |
#define SCTP_HASH_FREE | ( | table, | |
hashmark | |||
) | sctp_hashdestroy(table, M_PCB, hashmark) |
#define SCTP_HASH_FREE_DESTROY | ( | table, | |
hashmark | |||
) | sctp_hashfreedestroy(table, M_PCB, hashmark) |
#define SCTP_HASH_INIT | ( | size, | |
hashmark | |||
) | sctp_hashinit_flags(size, M_PCB, hashmark, HASH_NOWAIT) |
#define SCTP_HEADER_LEN | ( | m | ) | ((m)->m_pkthdr.len) |
#define SCTP_IFN_IS_IFT_LOOP | ( | ifn | ) | (strncmp((ifn)->ifn_name, "lo", 2) == 0) |
#define SCTP_IFNAMSIZ IFNAMSIZ |
#define SCTP_INIT_VRF_TABLEID | ( | vrf | ) |
#define SCTP_IP_ID | ( | inp | ) | (ip_id) |
#define SCTP_IP_OUTPUT | ( | result, | |
o_pak, | |||
ro, | |||
stcb, | |||
vrf_id | |||
) | sctp_userspace_ip_output(&result, o_pak, ro, stcb, vrf_id); |
#define SCTP_IPV6_V6ONLY | ( | inp | ) | (((struct inpcb *)inp)->inp_flags & IN6P_IPV6_V6ONLY) |
#define SCTP_IS_IT_LOOPBACK | ( | m | ) | 0 |
#define SCTP_M_COPYM m_copym |
#define SCTP_MAX_VRF_ID 0 |
#define SCTP_PACKED __attribute__((packed)) |
#define SCTP_PKTLOG_WRITERS_NEED_LOCK 3 |
#define SCTP_PRINTF | ( | ... | ) |
#define SCTP_PROCESS_STRUCT struct proc * |
#define SCTP_READ_RANDOM | ( | buf, | |
len | |||
) | read_random(buf, len) |
#define SCTP_REGISTER_INTERFACE | ( | ifhandle, | |
af | |||
) |
#define SCTP_RELEASE_HEADER | ( | m | ) |
#define SCTP_ROUTE_HAS_VALID_IFN | ( | ro | ) | ((ro)->ro_rt && (ro)->ro_rt->rt_ifp) |
#define SCTP_ROUTE_IS_REAL_LOOP | ( | ro | ) | 0 |
#define SCTP_RTALLOC | ( | ro, | |
vrf_id, | |||
fibnum | |||
) | sctp_userspace_rtalloc((sctp_route_t *)ro) |
#define SCTP_SB_CLEAR | ( | sb | ) |
#define SCTP_SB_LIMIT_RCV | ( | so | ) | so->so_rcv.sb_hiwat |
#define SCTP_SB_LIMIT_SND | ( | so | ) | so->so_snd.sb_hiwat |
#define SCTP_SET_MTU_OF_ROUTE | ( | sa, | |
rt, | |||
mtu | |||
) |
#define SCTP_SET_SO_NBIO | ( | so | ) | ((so)->so_state |= SS_NBIO) |
#define SCTP_SHA1_CTX struct sctp_sha1_context |
#define SCTP_SHA1_FINAL | ( | x, | |
y | |||
) | sctp_sha1_final((unsigned char *)x, y) |
#define SCTP_SHA1_INIT sctp_sha1_init |
#define SCTP_SHA1_UPDATE sctp_sha1_update |
#define SCTP_SIZE_OF_VRF_HASH 3 |
#define SCTP_SO_IS_NBIO | ( | so | ) | ((so)->so_state & SS_NBIO) |
#define SCTP_SO_TYPE | ( | so | ) | ((so)->so_type) |
#define SCTP_SORESERVE | ( | so, | |
send, | |||
recv | |||
) | soreserve(so, send, recv) |
#define SCTP_SOWAKEUP | ( | so | ) | wakeup(&(so)->so_timeo, so) |
#define SCTP_UNUSED __attribute__((unused)) |
#define SCTP_VRF_ADDR_HASH_SIZE 16 |
#define SCTP_VRF_IFN_HASH_SIZE 3 |
#define SCTP_ZERO_COPY_EVENT | ( | inp, | |
so | |||
) |
#define SCTP_ZERO_COPY_SENDQ_EVENT | ( | inp, | |
so | |||
) |
#define SCTP_ZONE_DESTROY | ( | zone | ) | umem_cache_destroy(zone); |
#define SCTPDBG | ( | level, | |
... | |||
) |
#define SCTPDBG_ADDR | ( | level, | |
addr | |||
) |
#define timevalsub | ( | tp1, | |
tp2 | |||
) |
typedef struct sctp_route sctp_route_t |
typedef struct sctp_rtentry sctp_rtentry_t |
typedef pthread_cond_t userland_cond_t |
typedef pthread_mutex_t userland_mutex_t |
typedef pthread_t userland_thread_t |
MALLOC_DECLARE | ( | SCTP_M_MAP | ) |
MALLOC_DECLARE | ( | SCTP_M_STRMI | ) |
MALLOC_DECLARE | ( | SCTP_M_STRMO | ) |
MALLOC_DECLARE | ( | SCTP_M_ASC_ADDR | ) |
MALLOC_DECLARE | ( | SCTP_M_ASC_IT | ) |
MALLOC_DECLARE | ( | SCTP_M_AUTH_CL | ) |
MALLOC_DECLARE | ( | SCTP_M_AUTH_KY | ) |
MALLOC_DECLARE | ( | SCTP_M_AUTH_HL | ) |
MALLOC_DECLARE | ( | SCTP_M_AUTH_IF | ) |
MALLOC_DECLARE | ( | SCTP_M_STRESET | ) |
MALLOC_DECLARE | ( | SCTP_M_CMSG | ) |
MALLOC_DECLARE | ( | SCTP_M_COPYAL | ) |
MALLOC_DECLARE | ( | SCTP_M_VRF | ) |
MALLOC_DECLARE | ( | SCTP_M_IFA | ) |
MALLOC_DECLARE | ( | SCTP_M_IFN | ) |
MALLOC_DECLARE | ( | SCTP_M_TIMW | ) |
MALLOC_DECLARE | ( | SCTP_M_MVRF | ) |
MALLOC_DECLARE | ( | SCTP_M_ITER | ) |
MALLOC_DECLARE | ( | SCTP_M_SOCKOPT | ) |
struct mbuf* sctp_get_mbuf_for_msg | ( | unsigned int | space_needed, |
int | want_header, | ||
int | how, | ||
int | allonebuf, | ||
int | type | ||
) |
void sctp_hashdestroy | ( | void * | vhashtbl, |
struct malloc_type * | type, | ||
u_long | hashmask | ||
) |
void sctp_hashfreedestroy | ( | void * | vhashtbl, |
struct malloc_type * | type, | ||
u_long | hashmask | ||
) |
void* sctp_hashinit_flags | ( | int | elements, |
struct malloc_type * | type, | ||
u_long * | hashmask, | ||
int | flags | ||
) |
int sctp_userspace_get_mtu_from_ifn | ( | uint32_t | if_index, |
int | af | ||
) |
void sctp_userspace_ip_output | ( | int * | result, |
struct mbuf * | o_pak, | ||
sctp_route_t * | ro, | ||
void * | stcb, | ||
uint32_t | vrf_id | ||
) |
void sctp_userspace_set_threadname | ( | const char * | name | ) |
int sctp_userspace_thread_create | ( | userland_thread_t * | thread, |
start_routine_t | start_routine | ||
) |