mishkin@apollo.COM (Nathaniel Mishkin) (03/13/89)
I'm running mt Xinu 4.3bsd on a VAXstation and I'm trying to get a simple program that uses XNS (AF_NS) to work, and I can't. I'd really appreciate it if someone who's trod this path before can tell me what must be the obvious thing I'm doing wrong. Here's what I did: I got "qe0" apparently configured right by doing: % ifconfig qe0 ns 0x29ce0.0x08002b02742e up ... % /etc/ifconfig qe0 qe0: flags=43<UP,BROADCAST,RUNNING> inet 192.9.11.19 netmask ffffff00 broadcast 192.9.11.0 ns 29CE0.8002B02742E I wrote a simple program to accept datagrams: #include <sys/time.h> #include <sys/types.h> #include <sys/socket.h> #include <netns/ns.h> #define NULL 0l char buff[10 * 1024]; main(argc, argv) char **argv; int argc; { int s; int cc, fromlen; struct sockaddr_ns name, xname, from; int len; if ((s = socket(AF_NS, SOCK_DGRAM, PF_UNSPEC)) < 0) { perror("Can't create socket"); exit(1); } bzero(&name, sizeof name); if (bind(s, &name, sizeof name) < 0) { perror("Can't bind"); exit(1); } len = sizeof xname; if (getsockname(s, &xname, &len) < 0) { perror("Can't get sock name"); exit(1); } printf("local name = %s\n", ns_ntoa(xname.sns_addr)); while (1) { fromlen = sizeof from; if ((cc = recvfrom(s, buff, sizeof buff, 0, &from, &fromlen)) < 0) { perror("Can't recv"); exit(1); } printf("[%s] (%d)\n", ns_ntoa(from.sns_addr), cc); } } and a simple program to send datagrams: #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> #include <netns/ns.h> #include <netdb.h> struct ns_addr ns_addr(); char *ns_ntoa(); char buff[1024]; main(argc, argv) char **argv; int argc; { int s; int i; struct sockaddr_ns name, xname; int cnt, len; if (argc < 4) { printf("usage: send <NS address> <# of msgs> <len of each msg>\n"); exit(1); } if ((s = socket(AF_NS, SOCK_DGRAM, PF_UNSPEC)) < 0) { perror("Can't create socket"); exit(1); } bzero(&name, sizeof name); name.sns_family = AF_NS; if (bind(s, &name, sizeof name) < 0) { perror("Can't bind socket"); exit(1); } len = sizeof xname; if (getsockname(s, &xname, &len) < 0) { perror("Can't get sock name"); exit(1); } printf("local name = %s\n", ns_ntoa(xname.sns_addr)); bzero(&name, sizeof name); name.sns_family = AF_NS; name.sns_addr = ns_addr(argv[1]); printf("remote name = %s\n", ns_ntoa(name.sns_addr)); cnt = atoi(argv[2]); len = atoi(argv[3]); for (i = 1; i <= cnt; i++) if (sendto(s, buff, len, 0, &name, sizeof name) < 0) { perror("Can't send"); exit(1); } } When I start the receiver I get: % rcv local name = 0.0.BC3 which looks OK. I run the sender and get: % send 0x29ce0.0x8002b02742e.0xbc3 10 10 local name = 0.0.BC4 remote name = 29CE0.8002B02742E.BC3 but the receiver never sees any of the datagrams sent by the sender. Are there any programs that use XNS datagrams (SOCK_DGRAM) that are part of standard 4.3bsd? -- Nat Mishkin Apollo Computer Inc., Chelmsford, MA mishkin@apollo.com -- -- Nat Mishkin Apollo Computer Inc., Chelmsford, MA mishkin@apollo.com