icmp_init

 

void __init icmp_init(struct net_proto_family *ops)
{
	struct inet_opt * inet;
	int i;

	for (i = 0; i < NR_CPUS; i++) {
		int err;

		if (!cpu_possible(i))
			continue;

		err = sock_create(PF_INET, SOCK_RAW, IPPROTO_ICMP,
				  &per_cpu(__icmp_socket, i));

		if (err < 0)
			panic("Failed to create the ICMP control socket.\n");

		per_cpu(__icmp_socket, i)->sk->sk_allocation = GFP_ATOMIC;
		per_cpu(__icmp_socket, i)->sk->sk_sndbuf = SK_WMEM_MAX * 2;
		inet = inet_sk (per_cpu (__ icmp_socket, i) -> sk);
		inet-> uc_ttl = -1;
		inet->pmtudisc = IP_PMTUDISC_DONT;

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

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326211642&siteId=291194637