Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4d93909 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by David S. Miller
Browse files

[ICSK]: Introduce inet_csk_ctl_sock_create



Consolidating open coded sequences in tcp and dccp, v4 and v6.

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 72478873
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -321,4 +321,8 @@ extern void inet_csk_listen_stop(struct sock *sk);

extern void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr);

extern int inet_csk_ctl_sock_create(struct socket **sock,
				    unsigned short family,
				    unsigned short type,
				    unsigned char protocol);
#endif /* _INET_CONNECTION_SOCK_H */
+2 −24
Original line number Diff line number Diff line
@@ -1099,29 +1099,6 @@ static struct inet_protosw dccp_v4_protosw = {
	.flags		= INET_PROTOSW_ICSK,
};

static char dccp_v4_ctl_socket_err_msg[] __initdata =
	KERN_ERR "DCCP: Failed to create the control socket.\n";

static int __init dccp_v4_ctl_sock_init(void)
{
	int rc = sock_create_kern(PF_INET, SOCK_DCCP, IPPROTO_DCCP,
				  &dccp_v4_ctl_socket);
	if (rc < 0)
		printk(dccp_v4_ctl_socket_err_msg);
	else {
		dccp_v4_ctl_socket->sk->sk_allocation = GFP_ATOMIC;
		inet_sk(dccp_v4_ctl_socket->sk)->uc_ttl = -1;

		/* Unhash it so that IP input processing does not even
		 * see it, we do not wish this socket to see incoming
		 * packets.
		 */
		dccp_v4_ctl_socket->sk->sk_prot->unhash(dccp_v4_ctl_socket->sk);
	}

	return rc;
}

static int __init dccp_v4_init(void)
{
	int err = proto_register(&dccp_v4_prot, 1);
@@ -1135,7 +1112,8 @@ static int __init dccp_v4_init(void)

	inet_register_protosw(&dccp_v4_protosw);

	err = dccp_v4_ctl_sock_init();
	err = inet_csk_ctl_sock_create(&dccp_v4_ctl_socket, PF_INET,
				       SOCK_DCCP, IPPROTO_DCCP);
	if (err)
		goto out_unregister_protosw;
out:
+3 −24
Original line number Diff line number Diff line
@@ -1229,29 +1229,6 @@ static struct inet_protosw dccp_v6_protosw = {
	.flags		= INET_PROTOSW_ICSK,
};

static char dccp_v6_ctl_socket_err_msg[] __initdata =
	KERN_ERR "DCCP: Failed to create the control socket.\n";

static int __init dccp_v6_ctl_sock_init(void)
{
	int rc = sock_create_kern(PF_INET6, SOCK_DCCP, IPPROTO_DCCP,
				  &dccp_v6_ctl_socket);
	if (rc < 0)
		printk(dccp_v6_ctl_socket_err_msg);
	else {
		dccp_v6_ctl_socket->sk->sk_allocation = GFP_ATOMIC;
		inet_sk(dccp_v6_ctl_socket->sk)->uc_ttl = -1;

		/* Unhash it so that IP input processing does not even
		 * see it, we do not wish this socket to see incoming
		 * packets.
		 */
		dccp_v6_ctl_socket->sk->sk_prot->unhash(dccp_v6_ctl_socket->sk);
	}

	return rc;
}

static int __init dccp_v6_init(void)
{
	int err = proto_register(&dccp_v6_prot, 1);
@@ -1265,7 +1242,9 @@ static int __init dccp_v6_init(void)

	inet6_register_protosw(&dccp_v6_protosw);

	if (dccp_v6_ctl_sock_init() != 0)
	err = inet_csk_ctl_sock_create(&dccp_v6_ctl_socket, PF_INET6,
				       SOCK_DCCP, IPPROTO_DCCP);
	if (err != 0)
		goto out_unregister_protosw;
out:
	return err;
+19 −0
Original line number Diff line number Diff line
@@ -648,3 +648,22 @@ void inet_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr)
}

EXPORT_SYMBOL_GPL(inet_csk_addr2sockaddr);

int inet_csk_ctl_sock_create(struct socket **sock, unsigned short family,
			     unsigned short type, unsigned char protocol)
{
	int rc = sock_create_kern(family, type, protocol, sock);

	if (rc == 0) {
		(*sock)->sk->sk_allocation = GFP_ATOMIC;
		inet_sk((*sock)->sk)->uc_ttl = -1;
		/*
		 * Unhash it so that IP input processing does not even see it,
		 * we do not wish this socket to see incoming packets.
		 */
		(*sock)->sk->sk_prot->unhash((*sock)->sk);
	}
	return rc;
}

EXPORT_SYMBOL_GPL(inet_csk_ctl_sock_create);
+1 −12
Original line number Diff line number Diff line
@@ -1828,21 +1828,10 @@ struct proto tcp_prot = {
	.rsk_prot		= &tcp_request_sock_ops,
};



void __init tcp_v4_init(struct net_proto_family *ops)
{
	int err = sock_create_kern(PF_INET, SOCK_RAW, IPPROTO_TCP, &tcp_socket);
	if (err < 0)
	if (inet_csk_ctl_sock_create(&tcp_socket, PF_INET, SOCK_RAW, IPPROTO_TCP) < 0)
		panic("Failed to create the TCP control socket.\n");
	tcp_socket->sk->sk_allocation   = GFP_ATOMIC;
	inet_sk(tcp_socket->sk)->uc_ttl = -1;

	/* Unhash it so that IP input processing does not even
	 * see it, we do not wish this socket to see incoming
	 * packets.
	 */
	tcp_socket->sk->sk_prot->unhash(tcp_socket->sk);
}

EXPORT_SYMBOL(ipv4_specific);
Loading