1 7e42d210 2004-04-21 devnull #include <u.h>
2 7e42d210 2004-04-21 devnull #define NOPLAN9DEFINES
3 7e42d210 2004-04-21 devnull #include <libc.h>
4 7e42d210 2004-04-21 devnull #include <ip.h>
6 7e42d210 2004-04-21 devnull #include <sys/socket.h>
7 7e42d210 2004-04-21 devnull #include <netinet/in.h>
10 7e42d210 2004-04-21 devnull * prefix of all v4 addresses
11 7e42d210 2004-04-21 devnull * copied from libip because libc cannot depend on libip
13 7e42d210 2004-04-21 devnull static uchar v4prefix[IPaddrlen] = {
14 7e42d210 2004-04-21 devnull 0, 0, 0, 0,
15 7e42d210 2004-04-21 devnull 0, 0, 0, 0,
16 7e42d210 2004-04-21 devnull 0, 0, 0xff, 0xff,
17 7e42d210 2004-04-21 devnull 0, 0, 0, 0
21 7e42d210 2004-04-21 devnull udpread(int fd, Udphdr *hdr, void *buf, long n)
23 7e42d210 2004-04-21 devnull struct sockaddr_in sin;
24 7e42d210 2004-04-21 devnull socklen_t len;
26 7e42d210 2004-04-21 devnull len = sizeof sin;
27 7e42d210 2004-04-21 devnull n = recvfrom(fd, buf, n, 0, (struct sockaddr*)&sin, &len);
28 7e42d210 2004-04-21 devnull if(n < 0)
29 7e42d210 2004-04-21 devnull return -1;
30 7e42d210 2004-04-21 devnull if(len != sizeof sin){
31 7e42d210 2004-04-21 devnull werrstr("recvfrom acting weird");
32 7e42d210 2004-04-21 devnull return -1;
34 7e42d210 2004-04-21 devnull memset(hdr, 0, sizeof *hdr);
35 7e42d210 2004-04-21 devnull memmove(hdr->raddr, v4prefix, IPaddrlen);
36 7e42d210 2004-04-21 devnull *(u32int*)(hdr->raddr+12) = *(u32int*)&sin.sin_addr;
37 7e42d210 2004-04-21 devnull *(u16int*)hdr->rport = *(u16int*)&sin.sin_port;
38 7e42d210 2004-04-21 devnull return n;
42 7e42d210 2004-04-21 devnull udpwrite(int fd, Udphdr *hdr, void *buf, long n)
44 7e42d210 2004-04-21 devnull struct sockaddr_in sin;
46 7e42d210 2004-04-21 devnull memset(&sin, 0, sizeof sin);
47 7e42d210 2004-04-21 devnull sin.sin_family = AF_INET;
48 7e42d210 2004-04-21 devnull *(u32int*)&sin.sin_addr = *(u32int*)(hdr->raddr+12);
49 7e42d210 2004-04-21 devnull *(u16int*)&sin.sin_port = *(u16int*)hdr->rport;
50 7e42d210 2004-04-21 devnull return sendto(fd, buf, n, 0, (struct sockaddr*)&sin, sizeof sin);