Skip to content
Snippets Groups Projects
socket.c 199 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	lock_sock_nested(newsk, SINGLE_DEPTH_NESTING);
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    	sctp_assoc_migrate(assoc, newsk);
    
    	/* If the association on the newsk is already closed before accept()
    	 * is called, set RCV_SHUTDOWN flag.
    	 */
    	if (sctp_state(assoc, CLOSED) && sctp_style(newsk, TCP))
    		newsk->sk_shutdown |= RCV_SHUTDOWN;
    
    	newsk->sk_state = SCTP_SS_ESTABLISHED;
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    /* This proto struct describes the ULP interface for SCTP.  */
    struct proto sctp_prot = {
    	.name        =	"SCTP",
    	.owner       =	THIS_MODULE,
    	.close       =	sctp_close,
    	.connect     =	sctp_connect,
    	.disconnect  =	sctp_disconnect,
    	.accept      =	sctp_accept,
    	.ioctl       =	sctp_ioctl,
    	.init        =	sctp_init_sock,
    	.destroy     =	sctp_destroy_sock,
    	.shutdown    =	sctp_shutdown,
    	.setsockopt  =	sctp_setsockopt,
    	.getsockopt  =	sctp_getsockopt,
    	.sendmsg     =	sctp_sendmsg,
    	.recvmsg     =	sctp_recvmsg,
    	.bind        =	sctp_bind,
    	.backlog_rcv =	sctp_backlog_rcv,
    	.hash        =	sctp_hash,
    	.unhash      =	sctp_unhash,
    	.get_port    =	sctp_get_port,
    	.obj_size    =  sizeof(struct sctp_sock),
    
    	.sysctl_mem  =  sysctl_sctp_mem,
    	.sysctl_rmem =  sysctl_sctp_rmem,
    	.sysctl_wmem =  sysctl_sctp_wmem,
    	.memory_pressure = &sctp_memory_pressure,
    	.enter_memory_pressure = sctp_enter_memory_pressure,
    	.memory_allocated = &sctp_memory_allocated,
    
    	.sockets_allocated = &sctp_sockets_allocated,
    
    #if IS_ENABLED(CONFIG_IPV6)
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    struct proto sctpv6_prot = {
    	.name		= "SCTPv6",
    	.owner		= THIS_MODULE,
    	.close		= sctp_close,
    	.connect	= sctp_connect,
    	.disconnect	= sctp_disconnect,
    	.accept		= sctp_accept,
    	.ioctl		= sctp_ioctl,
    	.init		= sctp_init_sock,
    	.destroy	= sctp_destroy_sock,
    	.shutdown	= sctp_shutdown,
    	.setsockopt	= sctp_setsockopt,
    	.getsockopt	= sctp_getsockopt,
    	.sendmsg	= sctp_sendmsg,
    	.recvmsg	= sctp_recvmsg,
    	.bind		= sctp_bind,
    	.backlog_rcv	= sctp_backlog_rcv,
    	.hash		= sctp_hash,
    	.unhash		= sctp_unhash,
    	.get_port	= sctp_get_port,
    	.obj_size	= sizeof(struct sctp6_sock),
    
    	.sysctl_mem	= sysctl_sctp_mem,
    	.sysctl_rmem	= sysctl_sctp_rmem,
    	.sysctl_wmem	= sysctl_sctp_wmem,
    	.memory_pressure = &sctp_memory_pressure,
    	.enter_memory_pressure = sctp_enter_memory_pressure,
    	.memory_allocated = &sctp_memory_allocated,
    
    	.sockets_allocated = &sctp_sockets_allocated,
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    };
    
    #endif /* IS_ENABLED(CONFIG_IPV6) */