BSD 4_3_Tahoe development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 31 May 1985 01:42:55 +0000 (17:42 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Fri, 31 May 1985 01:42:55 +0000 (17:42 -0800)
Work on file usr/guest/karels/tests/raw.c

Synthesized-from: CSRG/cd2/4.3tahoe

usr/guest/karels/tests/raw.c [new file with mode: 0644]

diff --git a/usr/guest/karels/tests/raw.c b/usr/guest/karels/tests/raw.c
new file mode 100644 (file)
index 0000000..36d0c5e
--- /dev/null
@@ -0,0 +1,77 @@
+#include <stdio.h>
+#include <netdb.h>
+
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+
+char   myname[32];
+struct ip ip;
+char   buf[BUFSIZ];
+struct iovec iov[2];
+
+main(argc, argv)
+       char *argv[];
+{
+       struct sockaddr_in sin;
+       struct hostent *hp;
+       int s, n, i;
+
+       if (argc < 2) {
+               printf("nothing to send\n");
+               exit(1);
+       }
+       s = socket(AF_INET, SOCK_RAW, IPPROTO_EGP);
+       if (s < 0) {
+               perror("socket");
+               exit(1);
+       }
+       bzero(&sin, sizeof (sin));
+       sin.sin_family = AF_INET;
+       if (gethostname(myname, sizeof (myname)) < 0) {
+               perror("gethostname");
+               exit(1);
+       }
+       hp = gethostbyname(myname);
+       if (hp == 0) {
+               printf("%s: don't know my name\n", myname);
+               exit(1);
+       }
+       bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
+       if (connect(s, &sin, sizeof (sin)) < 0) {
+               perror("connect");
+               exit(1);
+       }
+       if (write(s, argv[1], strlen(argv[1])) < 0) {
+               perror("writev");
+               exit(1);
+       }
+       iov[0].iov_base = (caddr_t)&ip;
+       iov[0].iov_len = sizeof (ip);
+       iov[1].iov_base = buf;
+       iov[1].iov_len = sizeof (buf);
+       n = readv(s, iov, 2);
+       if (n < 0) {
+               perror("readv");
+               exit(1);
+       }
+       printf("read returns %d bytes, %d data\n", n, n - sizeof (ip));
+       printip(&ip);
+       printf("data: %s\n", buf);
+}
+
+printip(ip)
+       register struct ip *ip;
+{
+
+       printf("header length: %d version %d\n", ip->ip_hl, ip->ip_v);
+       printf("type of service: %d total length %d\n", ip->ip_tos, ip->ip_len);
+       printf("id: %x frag offset: %x ttl: %d protocol: %d\n",
+           ip->ip_id, ip->ip_off, ip->ip_ttl, ip->ip_p);
+       printf("checksum: %d source: %s dst: %s\n", ip->ip_sum,
+           inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst));
+}