ng_ksocket.c (88739) | ng_ksocket.c (88945) |
---|---|
1 2/* 3 * ng_ksocket.c 4 * 5 * Copyright (c) 1996-1999 Whistle Communications, Inc. 6 * All rights reserved. 7 * 8 * Subject to the following obligations and disclaimer of warranty, use and --- 22 unchanged lines hidden (view full) --- 31 * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY 32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 34 * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY 35 * OF SUCH DAMAGE. 36 * 37 * Author: Archie Cobbs <archie@freebsd.org> 38 * | 1 2/* 3 * ng_ksocket.c 4 * 5 * Copyright (c) 1996-1999 Whistle Communications, Inc. 6 * All rights reserved. 7 * 8 * Subject to the following obligations and disclaimer of warranty, use and --- 22 unchanged lines hidden (view full) --- 31 * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY 32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 34 * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY 35 * OF SUCH DAMAGE. 36 * 37 * Author: Archie Cobbs <archie@freebsd.org> 38 * |
39 * $FreeBSD: head/sys/netgraph/ng_ksocket.c 88739 2001-12-31 17:45:16Z rwatson $ | 39 * $FreeBSD: head/sys/netgraph/ng_ksocket.c 88945 2002-01-06 01:08:30Z archie $ |
40 * $Whistle: ng_ksocket.c,v 1.1 1999/11/16 20:04:40 archie Exp $ 41 */ 42 43/* 44 * Kernel socket node type. This node type is basically a kernel-mode 45 * version of a socket... kindof like the reverse of the socket node type. 46 */ 47 --- 42 unchanged lines hidden (view full) --- 90typedef struct ng_ksocket_private *priv_p; 91 92/* Flags for priv_p */ 93#define KSF_CONNECTING 0x00000001 /* Waiting for connection complete */ 94#define KSF_ACCEPTING 0x00000002 /* Waiting for accept complete */ 95#define KSF_EOFSEEN 0x00000004 /* Have sent 0-length EOF mbuf */ 96#define KSF_CLONED 0x00000008 /* Cloned from an accepting socket */ 97#define KSF_EMBRYONIC 0x00000010 /* Cloned node with no hooks yet */ | 40 * $Whistle: ng_ksocket.c,v 1.1 1999/11/16 20:04:40 archie Exp $ 41 */ 42 43/* 44 * Kernel socket node type. This node type is basically a kernel-mode 45 * version of a socket... kindof like the reverse of the socket node type. 46 */ 47 --- 42 unchanged lines hidden (view full) --- 90typedef struct ng_ksocket_private *priv_p; 91 92/* Flags for priv_p */ 93#define KSF_CONNECTING 0x00000001 /* Waiting for connection complete */ 94#define KSF_ACCEPTING 0x00000002 /* Waiting for accept complete */ 95#define KSF_EOFSEEN 0x00000004 /* Have sent 0-length EOF mbuf */ 96#define KSF_CLONED 0x00000008 /* Cloned from an accepting socket */ 97#define KSF_EMBRYONIC 0x00000010 /* Cloned node with no hooks yet */ |
98#define KSF_SENDING 0x00000020 /* Sending on socket */ |
|
98 99/* Netgraph node methods */ 100static ng_constructor_t ng_ksocket_constructor; 101static ng_rcvmsg_t ng_ksocket_rcvmsg; 102static ng_shutdown_t ng_ksocket_shutdown; 103static ng_newhook_t ng_ksocket_newhook; 104static ng_rcvdata_t ng_ksocket_rcvdata; 105static ng_connect_t ng_ksocket_connect; --- 780 unchanged lines hidden (view full) --- 886 const node_p node = NG_HOOK_NODE(hook); 887 const priv_p priv = NG_NODE_PRIVATE(node); 888 struct socket *const so = priv->so; 889 struct sockaddr *sa = NULL; 890 meta_p meta; 891 int error; 892 struct mbuf *m; 893 | 99 100/* Netgraph node methods */ 101static ng_constructor_t ng_ksocket_constructor; 102static ng_rcvmsg_t ng_ksocket_rcvmsg; 103static ng_shutdown_t ng_ksocket_shutdown; 104static ng_newhook_t ng_ksocket_newhook; 105static ng_rcvdata_t ng_ksocket_rcvdata; 106static ng_connect_t ng_ksocket_connect; --- 780 unchanged lines hidden (view full) --- 887 const node_p node = NG_HOOK_NODE(hook); 888 const priv_p priv = NG_NODE_PRIVATE(node); 889 struct socket *const so = priv->so; 890 struct sockaddr *sa = NULL; 891 meta_p meta; 892 int error; 893 struct mbuf *m; 894 |
895 /* Avoid reentrantly sending on the socket */ 896 if ((priv->flags & KSF_SENDING) != 0) { 897 NG_FREE_ITEM(item); 898 return (EDEADLK); 899 } 900 |
|
894 /* Extract data and meta information */ 895 NGI_GET_M(item, m); 896 NGI_GET_META(item, meta); 897 NG_FREE_ITEM(item); 898 899 /* If any meta info, look for peer socket address */ 900 if (meta != NULL) { 901 struct meta_field_header *field; --- 7 unchanged lines hidden (view full) --- 909 || field->type != NG_KSOCKET_META_SOCKADDR) 910 continue; 911 sa = (struct sockaddr *)field->data; 912 break; 913 } 914 } 915 916 /* Send packet */ | 901 /* Extract data and meta information */ 902 NGI_GET_M(item, m); 903 NGI_GET_META(item, meta); 904 NG_FREE_ITEM(item); 905 906 /* If any meta info, look for peer socket address */ 907 if (meta != NULL) { 908 struct meta_field_header *field; --- 7 unchanged lines hidden (view full) --- 916 || field->type != NG_KSOCKET_META_SOCKADDR) 917 continue; 918 sa = (struct sockaddr *)field->data; 919 break; 920 } 921 } 922 923 /* Send packet */ |
924 priv->flags |= KSF_SENDING; |
|
917 error = (*so->so_proto->pr_usrreqs->pru_sosend)(so, sa, 0, m, 0, 0, td); | 925 error = (*so->so_proto->pr_usrreqs->pru_sosend)(so, sa, 0, m, 0, 0, td); |
926 priv->flags &= ~KSF_SENDING; |
|
918 919 /* Clean up and exit */ 920 NG_FREE_META(meta); 921 return (error); 922} 923 924/* 925 * Destroy node --- 359 unchanged lines hidden --- | 927 928 /* Clean up and exit */ 929 NG_FREE_META(meta); 930 return (error); 931} 932 933/* 934 * Destroy node --- 359 unchanged lines hidden --- |