67 * "drivers" that are actually IP (e.g., ICMP, UDP) can use the same set
68 * of flags.
69 */
70 #define IP_DEVMTFLAGS D_MP
71 #endif /* _KERNEL */
72
73 #define IP_MOD_NAME "ip"
74 #define IP_DEV_NAME "/dev/ip"
75 #define IP6_DEV_NAME "/dev/ip6"
76
77 #define UDP_MOD_NAME "udp"
78 #define UDP_DEV_NAME "/dev/udp"
79 #define UDP6_DEV_NAME "/dev/udp6"
80
81 #define TCP_MOD_NAME "tcp"
82 #define TCP_DEV_NAME "/dev/tcp"
83 #define TCP6_DEV_NAME "/dev/tcp6"
84
85 #define SCTP_MOD_NAME "sctp"
86
87 #ifndef _IPADDR_T
88 #define _IPADDR_T
89 typedef uint32_t ipaddr_t;
90 #endif
91
92 /* Number of bits in an address */
93 #define IP_ABITS 32
94 #define IPV4_ABITS IP_ABITS
95 #define IPV6_ABITS 128
96 #define IP_MAX_HW_LEN 40
97
98 #define IP_HOST_MASK (ipaddr_t)0xffffffffU
99
100 #define IP_CSUM(mp, off, sum) (~ip_cksum(mp, off, sum) & 0xFFFF)
101 #define IP_CSUM_PARTIAL(mp, off, sum) ip_cksum(mp, off, sum)
102 #define IP_BCSUM_PARTIAL(bp, len, sum) bcksum(bp, len, sum)
103
104 #define ILL_FRAG_HASH_TBL_COUNT ((unsigned int)64)
105 #define ILL_FRAG_HASH_TBL_SIZE (ILL_FRAG_HASH_TBL_COUNT * sizeof (ipfb_t))
106
200 ((mp)->b_next = (mblk_t *)(uintptr_t)(u))
201 #define IP_REASS_END(mp) ((uint_t)(uintptr_t)((mp)->b_prev))
202 #define IP_REASS_SET_END(mp, u) \
203 ((mp)->b_prev = (mblk_t *)(uintptr_t)(u))
204
205 #define IP_REASS_COMPLETE 0x1
206 #define IP_REASS_PARTIAL 0x2
207 #define IP_REASS_FAILED 0x4
208
209 /*
210 * Test to determine whether this is a module instance of IP or a
211 * driver instance of IP.
212 */
213 #define CONN_Q(q) (WR(q)->q_next == NULL)
214
215 #define Q_TO_CONN(q) ((conn_t *)(q)->q_ptr)
216 #define Q_TO_TCP(q) (Q_TO_CONN((q))->conn_tcp)
217 #define Q_TO_UDP(q) (Q_TO_CONN((q))->conn_udp)
218 #define Q_TO_ICMP(q) (Q_TO_CONN((q))->conn_icmp)
219 #define Q_TO_RTS(q) (Q_TO_CONN((q))->conn_rts)
220
221 #define CONNP_TO_WQ(connp) ((connp)->conn_wq)
222 #define CONNP_TO_RQ(connp) ((connp)->conn_rq)
223
224 #define GRAB_CONN_LOCK(q) { \
225 if (q != NULL && CONN_Q(q)) \
226 mutex_enter(&(Q_TO_CONN(q))->conn_lock); \
227 }
228
229 #define RELEASE_CONN_LOCK(q) { \
230 if (q != NULL && CONN_Q(q)) \
231 mutex_exit(&(Q_TO_CONN(q))->conn_lock); \
232 }
233
234 /*
235 * Ref counter macros for ioctls. This provides a guard for TCP to stop
236 * tcp_close from removing the rq/wq whilst an ioctl is still in flight on the
237 * stream. The ioctl could have been queued on e.g. an ipsq. tcp_close will wait
238 * until the ioctlref count is zero before proceeding.
239 * Ideally conn_oper_pending_ill would be used for this purpose. However, in the
3731 #define SQTAG_IP_FANOUT_TCP 26
3732 #define SQTAG_IPSQ_CLEAN_RING 27
3733 #define SQTAG_TCP_WPUT_OTHER 28
3734 #define SQTAG_TCP_CONN_REQ_UNBOUND 29
3735 #define SQTAG_TCP_SEND_PENDING 30
3736 #define SQTAG_BIND_RETRY 31
3737 #define SQTAG_UDP_FANOUT 32
3738 #define SQTAG_UDP_INPUT 33
3739 #define SQTAG_UDP_WPUT 34
3740 #define SQTAG_UDP_OUTPUT 35
3741 #define SQTAG_TCP_KSSL_INPUT 36
3742 #define SQTAG_TCP_DROP_Q0 37
3743 #define SQTAG_TCP_CONN_REQ_2 38
3744 #define SQTAG_IP_INPUT_RX_RING 39
3745 #define SQTAG_SQUEUE_CHANGE 40
3746 #define SQTAG_CONNECT_FINISH 41
3747 #define SQTAG_SYNCHRONOUS_OP 42
3748 #define SQTAG_TCP_SHUTDOWN_OUTPUT 43
3749 #define SQTAG_TCP_IXA_CLEANUP 44
3750 #define SQTAG_TCP_SEND_SYNACK 45
3751
3752 extern sin_t sin_null; /* Zero address for quick clears */
3753 extern sin6_t sin6_null; /* Zero address for quick clears */
3754
3755 #endif /* _KERNEL */
3756
3757 #ifdef __cplusplus
3758 }
3759 #endif
3760
3761 #endif /* _INET_IP_H */
|
67 * "drivers" that are actually IP (e.g., ICMP, UDP) can use the same set
68 * of flags.
69 */
70 #define IP_DEVMTFLAGS D_MP
71 #endif /* _KERNEL */
72
73 #define IP_MOD_NAME "ip"
74 #define IP_DEV_NAME "/dev/ip"
75 #define IP6_DEV_NAME "/dev/ip6"
76
77 #define UDP_MOD_NAME "udp"
78 #define UDP_DEV_NAME "/dev/udp"
79 #define UDP6_DEV_NAME "/dev/udp6"
80
81 #define TCP_MOD_NAME "tcp"
82 #define TCP_DEV_NAME "/dev/tcp"
83 #define TCP6_DEV_NAME "/dev/tcp6"
84
85 #define SCTP_MOD_NAME "sctp"
86
87 #define DCCP_MOD_NAME "dccp"
88 #define DCCP_DEV_NAME "/dev/dccp"
89 #define DCCP6_DEV_NAME "/dev/dccp6"
90
91 #ifndef _IPADDR_T
92 #define _IPADDR_T
93 typedef uint32_t ipaddr_t;
94 #endif
95
96 /* Number of bits in an address */
97 #define IP_ABITS 32
98 #define IPV4_ABITS IP_ABITS
99 #define IPV6_ABITS 128
100 #define IP_MAX_HW_LEN 40
101
102 #define IP_HOST_MASK (ipaddr_t)0xffffffffU
103
104 #define IP_CSUM(mp, off, sum) (~ip_cksum(mp, off, sum) & 0xFFFF)
105 #define IP_CSUM_PARTIAL(mp, off, sum) ip_cksum(mp, off, sum)
106 #define IP_BCSUM_PARTIAL(bp, len, sum) bcksum(bp, len, sum)
107
108 #define ILL_FRAG_HASH_TBL_COUNT ((unsigned int)64)
109 #define ILL_FRAG_HASH_TBL_SIZE (ILL_FRAG_HASH_TBL_COUNT * sizeof (ipfb_t))
110
204 ((mp)->b_next = (mblk_t *)(uintptr_t)(u))
205 #define IP_REASS_END(mp) ((uint_t)(uintptr_t)((mp)->b_prev))
206 #define IP_REASS_SET_END(mp, u) \
207 ((mp)->b_prev = (mblk_t *)(uintptr_t)(u))
208
209 #define IP_REASS_COMPLETE 0x1
210 #define IP_REASS_PARTIAL 0x2
211 #define IP_REASS_FAILED 0x4
212
213 /*
214 * Test to determine whether this is a module instance of IP or a
215 * driver instance of IP.
216 */
217 #define CONN_Q(q) (WR(q)->q_next == NULL)
218
219 #define Q_TO_CONN(q) ((conn_t *)(q)->q_ptr)
220 #define Q_TO_TCP(q) (Q_TO_CONN((q))->conn_tcp)
221 #define Q_TO_UDP(q) (Q_TO_CONN((q))->conn_udp)
222 #define Q_TO_ICMP(q) (Q_TO_CONN((q))->conn_icmp)
223 #define Q_TO_RTS(q) (Q_TO_CONN((q))->conn_rts)
224 #define Q_TO_DCCP(q) (Q_TO_CONN((q))->conn_dccp)
225
226 #define CONNP_TO_WQ(connp) ((connp)->conn_wq)
227 #define CONNP_TO_RQ(connp) ((connp)->conn_rq)
228
229 #define GRAB_CONN_LOCK(q) { \
230 if (q != NULL && CONN_Q(q)) \
231 mutex_enter(&(Q_TO_CONN(q))->conn_lock); \
232 }
233
234 #define RELEASE_CONN_LOCK(q) { \
235 if (q != NULL && CONN_Q(q)) \
236 mutex_exit(&(Q_TO_CONN(q))->conn_lock); \
237 }
238
239 /*
240 * Ref counter macros for ioctls. This provides a guard for TCP to stop
241 * tcp_close from removing the rq/wq whilst an ioctl is still in flight on the
242 * stream. The ioctl could have been queued on e.g. an ipsq. tcp_close will wait
243 * until the ioctlref count is zero before proceeding.
244 * Ideally conn_oper_pending_ill would be used for this purpose. However, in the
3736 #define SQTAG_IP_FANOUT_TCP 26
3737 #define SQTAG_IPSQ_CLEAN_RING 27
3738 #define SQTAG_TCP_WPUT_OTHER 28
3739 #define SQTAG_TCP_CONN_REQ_UNBOUND 29
3740 #define SQTAG_TCP_SEND_PENDING 30
3741 #define SQTAG_BIND_RETRY 31
3742 #define SQTAG_UDP_FANOUT 32
3743 #define SQTAG_UDP_INPUT 33
3744 #define SQTAG_UDP_WPUT 34
3745 #define SQTAG_UDP_OUTPUT 35
3746 #define SQTAG_TCP_KSSL_INPUT 36
3747 #define SQTAG_TCP_DROP_Q0 37
3748 #define SQTAG_TCP_CONN_REQ_2 38
3749 #define SQTAG_IP_INPUT_RX_RING 39
3750 #define SQTAG_SQUEUE_CHANGE 40
3751 #define SQTAG_CONNECT_FINISH 41
3752 #define SQTAG_SYNCHRONOUS_OP 42
3753 #define SQTAG_TCP_SHUTDOWN_OUTPUT 43
3754 #define SQTAG_TCP_IXA_CLEANUP 44
3755 #define SQTAG_TCP_SEND_SYNACK 45
3756 #define SQTAG_IP_DCCP_INPUT 46
3757 #define SQTAG_DCCP_OUTPUT 47
3758 #define SQTAG_DCCP_CONN_REQ_UNBOUND 48
3759 #define SQTAG_DCCP_SEND_RESPONSE 49
3760 #define SQTAG_IP_DCCP_CLOSE 50
3761 #define SQTAG_DCCP_TIMER 51
3762
3763 extern sin_t sin_null; /* Zero address for quick clears */
3764 extern sin6_t sin6_null; /* Zero address for quick clears */
3765
3766 #endif /* _KERNEL */
3767
3768 #ifdef __cplusplus
3769 }
3770 #endif
3771
3772 #endif /* _INET_IP_H */
|