static char sccsid
[] = "@(#)query.c 4.5 10/7/82";
char packet
[MAXPACKETSIZE
];
printf("usage: query hosts...\n");
s
= socket(SOCK_DGRAM
, 0, 0, 0);
* Listen for returning packets
cc
= receive(s
, &from
, packet
, sizeof (packet
));
struct sockaddr_in router
;
register struct rip
*msg
= (struct rip
*)packet
;
bzero((char *)&router
, sizeof (router
));
hp
= gethostbyname(host
);
printf("%s: unknown\n", host
);
bcopy(hp
->h_addr
, &router
.sin_addr
, hp
->h_length
);
router
.sin_family
= AF_INET
;
sp
= getservbyname("router", "udp");
printf("udp/router: service unknown\n");
router
.sin_port
= htons(sp
->s_port
);
msg
->rip_cmd
= RIPCMD_REQUEST
;
msg
->rip_nets
[0].rip_dst
.sa_family
= AF_UNSPEC
;
msg
->rip_nets
[0].rip_metric
= HOPCNT_INFINITY
;
if (send(s
, &router
, packet
, sizeof (struct rip
)) < 0)
* Handle an incoming routing packet.
struct sockaddr_in
*from
;
register struct rip
*msg
= (struct rip
*)packet
;
if (msg
->rip_cmd
!= RIPCMD_RESPONSE
)
hp
= gethostbyaddr(&from
->sin_addr
, sizeof (struct in_addr
), AF_INET
);
name
= hp
== 0 ? "???" : hp
->h_name
;
printf("from %s(%x):\n", name
, from
->sin_addr
);
register struct sockaddr_in
*sin
;
if (size
< sizeof (struct netinfo
))
sin
= (struct sockaddr_in
*)&n
->rip_dst
;
if (inet_lnaof(sin
->sin_addr
) == INADDR_ANY
) {
np
= getnetbyaddr(inet_netof(sin
->sin_addr
), AF_INET
);
name
= np
? np
->n_name
: "???";
hp
= gethostbyaddr(&sin
->sin_addr
,
sizeof (struct in_addr
), AF_INET
);
name
= hp
? hp
->h_name
: "???";
printf("\t%s(%x), metric %d\n", name
,
sin
->sin_addr
, n
->rip_metric
);
size
-= sizeof (struct netinfo
), n
++;