ATF_TC_BODY(loopmtu_csum, tc) { struct sockaddr_in sin; char data[2000]; int s; setup(); ATF_CHECK(enable_locsums() == 0); /* open raw socket */ s = rump_sys_socket(PF_INET, SOCK_RAW, 0); if (s == -1) atf_tc_fail_errno("raw socket"); /* then, send data */ memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_len = sizeof(sin); sin.sin_port = htons(12345); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); if (rump_sys_sendto(s, data, sizeof(data), 0, (struct sockaddr *)&sin, sizeof(sin)) == -1) atf_tc_fail_errno("sendto failed"); }
int main() { struct sockaddr_in client; struct sockaddr_in server; char msg[500]; char buf[65535]; socklen_t clen; ssize_t nn; ssize_t off; int size = 1024 * 1024; int s; rump_init(); rump_pub_lwproc_rfork(0); if (rump_pub_netconfig_ifcreate(IFNAME) != 0) errx(1, "failed to create " IFNAME); if (rump_pub_netconfig_ipv4_ifaddr(IFNAME, IF_ADDR, "255.255.255.0") != 0) errx(1, "failed to create " IFNAME); //rump_pub_netconfig_dhcp_ipv4_oneshot(IFNAME); s = rump_sys_socket(PF_INET, SOCK_DGRAM, 0); if (s == -1) err(1,"socket"); memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(ECHOSERVER_RX_PORT); server.sin_addr.s_addr = inet_addr(IF_ADDR); rump_sys_setsockopt(s, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); if (rump_sys_bind(s, (struct sockaddr *)&server, sizeof(server)) == -1) err(1, "binded"); printf("socket binded\r\n"); printf("Waiting connection on port = %d\r\n",ECHOSERVER_RX_PORT); memset(&client, 0, sizeof(client)); while(1) { memset(msg,0,sizeof(msg)); clen = sizeof(client); nn = rump_sys_recvfrom(s,msg,sizeof(msg),0,(struct sockaddr *)&client,&clen); if (nn<0) { perror("Error receiving data"); } else { rump_sys_sendto(s,buf,nn,0,(struct sockaddr *)&client,clen); } } }
ATF_TC_BODY(OOSIOCGIFBRDADDR, tc) { int fd, ifnum; struct oifreq ifreq; struct sockaddr_in *sin; int rv; memset(&ifreq,'\0',sizeof ifreq); rump_init(); /* create an interface and give it netmask 0xffff0000 */ rv = rump_pub_shmif_create("bus", &ifnum); if (rv) atf_tc_fail("failed to create shmif: %s", strerror(rv)); sprintf(ifreq.ifr_name, "shmif%d", ifnum); netcfg_rump_if(ifreq.ifr_name, "1.7.64.10", "255.255.0.0"); /* query kernel for iface bcast */ RL(fd = rump_sys_socket(AF_INET, SOCK_DGRAM, 0)); RL(rump_sys_ioctl(fd, OOSIOCGIFBRDADDR, &ifreq)); /* make sure we got what we deserve */ sin = (struct sockaddr_in *)&ifreq.ifr_broadaddr; ATF_REQUIRE_EQ(sin->sin_addr.s_addr, htonl(0x0107ffff)); rump_sys_close(fd); }
static void child(bool master) { char ifname[IFNAMSIZ]; struct carpreq cr; struct ifreq ifr; const char *carpif; int s; /* helps reading carp debug output */ if (master) carpif = "carp0"; else carpif = "carp1"; /* * Should use sysctl, bug debug is dabug. */ { //extern int rumpns_carp_opts[]; /* XXX */ //rumpns_carp_opts[CARPCTL_LOG] = 1; } rump_init(); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, carpif, sizeof(ifr.ifr_name)); RL(s = rump_sys_socket(PF_INET, SOCK_DGRAM, 0)); RL(rump_sys_ioctl(s, SIOCIFCREATE, &ifr)); netcfg_rump_makeshmif(THEBUS, ifname); if (master) netcfg_rump_if(ifname, "10.1.1.1", "255.255.255.0"); else netcfg_rump_if(ifname, "10.1.1.2", "255.255.255.0"); /* configure the carp interface */ ifr.ifr_data = &cr; RL(rump_sys_ioctl(s, SIOCGVH, &ifr)); strlcpy(cr.carpr_carpdev, ifname, sizeof(cr.carpr_carpdev)); cr.carpr_vhid = 175; if (master) cr.carpr_advskew = 0; else cr.carpr_advskew = 200; cr.carpr_advbase = 1; strcpy((char *)cr.carpr_key, "s3cret"); RL(rump_sys_ioctl(s, SIOCSVH, &ifr)); netcfg_rump_if(carpif, "10.1.1.100", "255.255.255.0"); /* tassa pause()en enka muuta voi */ pause(); }
int main() { struct sockaddr_in sin; char buf[65535]; struct hostent *hp; ssize_t nn; ssize_t off; int s, e; hp = gethostbyname(DESTHOST); if (!hp || hp->h_addrtype != AF_INET) errx(1, "failed to resolve \"%s\"", DESTHOST); rump_init(); #ifndef USE_SOCKIN if ((e = rump_pub_netconfig_ifcreate("virt0")) != 0) die(e, "create virt0"); if ((e = rump_pub_netconfig_dhcp_ipv4_oneshot("virt0")) != 0) die(e, "dhcp address"); #endif s = rump_sys_socket(PF_INET, SOCK_STREAM, 0); if (s == -1) die(errno, "socket"); memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; #if 0 sin.sin_len = sizeof(sin); #endif sin.sin_port = htons(80); memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr)); if (rump_sys_connect(s, (struct sockaddr *)&sin, sizeof(sin)) == -1) die(errno, "connect"); printf("connected\n"); #define WANTHTML "GET / HTTP/1.1\nHost: www.netbsd.org\n\n" nn = rump_sys_write(s, WANTHTML, sizeof(WANTHTML)-1); printf("write rv %zd\n", nn); for (;;) { nn = rump_sys_read(s, buf, sizeof(buf)-1); if (nn == -1) die(errno, "read failed"); if (nn == 0) break; buf[nn] = '\0'; printf("%s", buf); } rump_sys_close(s); die(0, NULL); }
/* * Prepare rump, configure interface and route to cause fragmentation */ static void setup(void) { char ifname[IFNAMSIZ]; struct { struct rt_msghdr m_rtm; struct sockaddr_in m_sin; } m_rtmsg; #define rtm m_rtmsg.m_rtm #define rsin m_rtmsg.m_sin struct ifreq ifr; int s; rump_init(); /* first, config lo0 & route */ strcpy(ifname, "lo0"); netcfg_rump_if(ifname, "127.0.0.1", "255.0.0.0"); netcfg_rump_route("127.0.0.1", "255.0.0.0", "127.0.0.1"); if ((s = rump_sys_socket(PF_ROUTE, SOCK_RAW, 0)) == -1) atf_tc_fail_errno("routing socket"); /* * set MTU for interface so that route MTU doesn't * get overridden by it. */ memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, "lo0"); ifr.ifr_mtu = 1300; if (rump_sys_ioctl(s, SIOCSIFMTU, &ifr) == -1) atf_tc_fail_errno("set mtu"); /* change route MTU to 100 */ memset(&m_rtmsg, 0, sizeof(m_rtmsg)); rtm.rtm_type = RTM_CHANGE; rtm.rtm_flags = RTF_STATIC; rtm.rtm_version = RTM_VERSION; rtm.rtm_seq = 3; rtm.rtm_inits = RTV_MTU; rtm.rtm_addrs = RTA_DST; rtm.rtm_rmx.rmx_mtu = 100; rtm.rtm_msglen = sizeof(m_rtmsg); memset(&rsin, 0, sizeof(rsin)); rsin.sin_family = AF_INET; rsin.sin_len = sizeof(rsin); rsin.sin_addr.s_addr = inet_addr("127.0.0.1"); if (rump_sys_write(s, &m_rtmsg, sizeof(m_rtmsg)) != sizeof(m_rtmsg)) atf_tc_fail_errno("set route mtu"); rump_sys_close(s); }
int netconnect() { struct sockaddr_in sin; char *buf; ssize_t nn, off; int error; int s; s = rump_sys_socket(PF_INET, SOCK_STREAM, 0); if (s == -1) { printf("you're mean! no sucket for you!\n"); return -1; } printf("!!!\nTHE FD value: %d\n!!!\n", s); memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(80); sin.sin_addr.s_addr = DESTADDR; if (rump_sys_connect(s, (struct sockaddr *)&sin, sizeof(sin)) == -1) { printf("could not connect\n"); return -1; } nn = rump_sys_write(s, WANTHTML, sizeof(WANTHTML)-1); printf("wrote http request, rv %zd\n", nn); buf = calloc(1, BUFSIZE); off = 0; do { nn = rump_sys_read(s, buf+off, (BUFSIZE-off)-1); off += nn; if (off >= BUFSIZE) exit(-1); } while (nn > 0); if (nn == -1) { printf("read failed: %zd\n", nn); return -1; } printf("read %zd bytes\n", off); /* display last 500 bytes of delicious info */ buf[off] = '\0'; off -= 500; if (off < 0) off = 0; printf("that was an educational experience. " "we learned:\n"); printf("%s", &buf[off]); }
ATF_TC_BODY(sigio, tc) { struct sockaddr_in sin; int ls; int cs; int fl; int sc; signal(SIGIO, gotsig); RZ(system("rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet " RUMPSERV)); RL(setenv("RUMP_SERVER", RUMPSERV, 1)); RL(rumpclient_init()); RL(ls = rump_sys_socket(PF_INET, SOCK_STREAM, 0)); RL(rump_sys_fcntl(ls, F_SETOWN, rump_sys_getpid())); RL(fl = rump_sys_fcntl(ls, F_GETFL)); RL(rump_sys_fcntl(ls, F_SETFL, fl | O_ASYNC)); memset(&sin, 0, sizeof(sin)); sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_port = htons(12345); RL(rump_sys_bind(ls, (struct sockaddr *)&sin, sizeof(sin))); RL(rump_sys_listen(ls, 5)); RL(cs = rump_sys_socket(PF_INET, SOCK_STREAM, 0)); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); ATF_REQUIRE_EQ(sigcnt, 0); RL(rump_sys_connect(cs, (struct sockaddr *)&sin, sizeof(sin))); sc = sigcnt; printf("sigcnt after connect: %d\n", sc); ATF_REQUIRE(sc >= 1); }
} ERR("Creating Bus\n"); rump_pub_shmif_create(filename, 0); free(filename); char const *ip_address_str = inet_ntoa( (struct in_addr) { .s_addr = ip_address } ); ERR("Setting IP address %s\n", ip_address_str); rump_pub_netconfig_ipv4_ifaddr( "shmif0", ip_address_str, "0.0.0.0"); rump_pub_netconfig_ifup("shmif0"); ERR("Creating Socket\n"); tcpsock = rump_sys_socket(PF_INET, SOCK_STREAM, 0); if (tcpsock <= 0) { die(errno, "socket"); } long req_port = 26420; if (argc > 1) { req_port = strtol(argv[1], NULL, 0); if (req_port < 0 || req_port > 65535) { die(26, "invalid port number"); } } uint16_t const portnum = (uint16_t) req_port; ERR("Binding to port %d\n", portnum); struct sockaddr_in sin = {