xref: /netbsd-src/sys/rump/net/lib/libnetinet/netinet_component.c (revision 6ffff4f242a1d82be7e156c3b9b52202b2135ad8)
1*6ffff4f2Sthorpej /*	$NetBSD: netinet_component.c,v 1.13 2022/09/03 02:48:01 thorpej Exp $	*/
25c81644cSpooka 
35c81644cSpooka /*
45c81644cSpooka  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
55c81644cSpooka  *
65c81644cSpooka  * Development of this software was supported by The Nokia Foundation
75c81644cSpooka  *
85c81644cSpooka  * Redistribution and use in source and binary forms, with or without
95c81644cSpooka  * modification, are permitted provided that the following conditions
105c81644cSpooka  * are met:
115c81644cSpooka  * 1. Redistributions of source code must retain the above copyright
125c81644cSpooka  *    notice, this list of conditions and the following disclaimer.
135c81644cSpooka  * 2. Redistributions in binary form must reproduce the above copyright
145c81644cSpooka  *    notice, this list of conditions and the following disclaimer in the
155c81644cSpooka  *    documentation and/or other materials provided with the distribution.
165c81644cSpooka  *
175c81644cSpooka  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
185c81644cSpooka  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
195c81644cSpooka  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
205c81644cSpooka  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
215c81644cSpooka  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
225c81644cSpooka  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
235c81644cSpooka  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
245c81644cSpooka  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
255c81644cSpooka  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
265c81644cSpooka  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
275c81644cSpooka  * SUCH DAMAGE.
285c81644cSpooka  */
295c81644cSpooka 
305c81644cSpooka #include <sys/cdefs.h>
31*6ffff4f2Sthorpej __KERNEL_RCSID(0, "$NetBSD: netinet_component.c,v 1.13 2022/09/03 02:48:01 thorpej Exp $");
325c81644cSpooka 
335c81644cSpooka #include <sys/param.h>
345c81644cSpooka #include <sys/domain.h>
355c81644cSpooka #include <sys/protosw.h>
365c81644cSpooka #include <sys/socketvar.h>
375c81644cSpooka 
385c81644cSpooka #include <net/if.h>
395c81644cSpooka #include <netinet/in.h>
405c81644cSpooka #include <netinet/in_var.h>
415c81644cSpooka #include <netinet/ip_var.h>
425c81644cSpooka #include <netinet/if_inarp.h>
435c81644cSpooka 
446bb51422Spooka #include <rump-sys/kern.h>
456bb51422Spooka #include <rump-sys/net.h>
465c81644cSpooka 
RUMP_COMPONENT(RUMP_COMPONENT_NET)475c81644cSpooka RUMP_COMPONENT(RUMP_COMPONENT_NET)
485c81644cSpooka {
495c81644cSpooka 	extern struct domain arpdomain, inetdomain;
505c81644cSpooka 
51b41a4e16Spooka 	domain_attach(&arpdomain);
52b41a4e16Spooka 	domain_attach(&inetdomain);
535c81644cSpooka }
545c81644cSpooka 
55ac86ae25Sozaki-r int carpattach(int);
56ac86ae25Sozaki-r 
RUMP_COMPONENT(RUMP_COMPONENT_NET_IF)57ac86ae25Sozaki-r RUMP_COMPONENT(RUMP_COMPONENT_NET_IF)
58ac86ae25Sozaki-r {
59ac86ae25Sozaki-r 
60ac86ae25Sozaki-r 	carpattach(1);
61ac86ae25Sozaki-r }
62ac86ae25Sozaki-r 
RUMP_COMPONENT(RUMP_COMPONENT_NET_IFCFG)635c81644cSpooka RUMP_COMPONENT(RUMP_COMPONENT_NET_IFCFG)
645c81644cSpooka {
655c81644cSpooka 	struct ifaliasreq ia;
665c81644cSpooka 	struct sockaddr_in *sin;
675c81644cSpooka 	struct socket *so;
685c81644cSpooka 	int error;
695c81644cSpooka 
70ccab2709Schristos 	if (lo0ifp == NULL)
71ccab2709Schristos 		panic("lo0 config: rumpnet_net has not been initialized");
72ccab2709Schristos 
735c81644cSpooka 	if ((error = socreate(AF_INET, &so, SOCK_DGRAM, 0, curlwp, NULL)) != 0)
745c81644cSpooka 		panic("lo0 config: cannot create socket");
755c81644cSpooka 
765c81644cSpooka 	/* configure 127.0.0.1 for lo0 */
775c81644cSpooka 	memset(&ia, 0, sizeof(ia));
785c81644cSpooka 	strcpy(ia.ifra_name, "lo0");
795c81644cSpooka 	sin = (struct sockaddr_in *)&ia.ifra_addr;
805c81644cSpooka 	sin->sin_family = AF_INET;
815c81644cSpooka 	sin->sin_len = sizeof(struct sockaddr_in);
825c81644cSpooka 	sin->sin_addr.s_addr = inet_addr("127.0.0.1");
835c81644cSpooka 
845c81644cSpooka 	sin = (struct sockaddr_in *)&ia.ifra_mask;
855c81644cSpooka 	sin->sin_family = AF_INET;
865c81644cSpooka 	sin->sin_len = sizeof(struct sockaddr_in);
875c81644cSpooka 	sin->sin_addr.s_addr = inet_addr("255.0.0.0");
885c81644cSpooka 
895c81644cSpooka 	sin = (struct sockaddr_in *)&ia.ifra_broadaddr;
905c81644cSpooka 	sin->sin_family = AF_INET;
915c81644cSpooka 	sin->sin_len = sizeof(struct sockaddr_in);
925c81644cSpooka 	sin->sin_addr.s_addr = inet_addr("127.255.255.255");
935c81644cSpooka 
94ef58cf2cSozaki-r 	KERNEL_LOCK(1, NULL);
95cb1c111aSozaki-r 	IFNET_LOCK(lo0ifp);
960dedd977Srtr 	in_control(so, SIOCAIFADDR, &ia, lo0ifp);
97cb1c111aSozaki-r 	IFNET_UNLOCK(lo0ifp);
98ef58cf2cSozaki-r 	KERNEL_UNLOCK_ONE(NULL);
995c81644cSpooka 	if_up(lo0ifp);
1005c81644cSpooka 	soclose(so);
1015c81644cSpooka }
102