|
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 | ||
| ) |
1.8.13