Lines Matching refs:rdev

105 	struct rarpdev		*rdev;		/* which device reply for */
154 struct rarpdev *rdev;
263 for (rdev = rarpdev_head; rdev != NULL; rdev = rdev->next) {
264 init_rarpdev(rdev);
280 for (rdev = rarpdev_head; rdev != NULL; rdev = rdev->next) {
281 if (rdev->dh_rarp != NULL) {
283 (void *(*)(void *))do_rarp, (void *)rdev,
305 struct rarpdev *rdev;
355 if ((rdev = find_device(&ifsp)) == NULL) {
356 rdev = calloc(1, sizeof (struct rarpdev));
357 if (rdev == NULL)
360 (void) strlcpy(rdev->device, ifsp.ifsp_devnm,
361 sizeof (rdev->device));
362 rdev->unit = ifsp.ifsp_ppa;
364 rdev->next = rarpdev_head;
365 rarpdev_head = rdev;
379 ifdev->next = rdev->ifdev;
380 rdev->ifdev = ifdev;
388 struct rarpdev *rdev;
390 for (rdev = rarpdev_head; rdev != NULL; rdev = rdev->next) {
391 if (specp->ifsp_ppa == rdev->unit &&
392 strcmp(specp->ifsp_devnm, rdev->device) == 0)
393 return (rdev);
399 init_rarpdev(struct rarpdev *rdev)
410 (void) snprintf(linkname, DLPI_LINKNAME_MAX, "%s%d", rdev->device,
411 rdev->unit);
428 if ((retval = dlpi_get_physaddr(dh, DL_CURR_PHYS_ADDR, rdev->physaddr,
434 rdev->physaddrlen = physaddrlen;
435 rdev->ifrarplen = sizeof (struct arphdr) + (2 * sizeof (ipaddr_t)) +
439 str = _link_ntoa(rdev->physaddr, str,
440 rdev->physaddrlen, IFT_OTHER);
448 * Assign dlpi handle to rdev.
450 rdev->dh_rarp = dh;
456 for (ifdev = rdev->ifdev; ifdev != NULL; ifdev = ifdev->next) {
461 dev = rdev->device;
462 unit = rdev->unit;
480 struct rarpdev *rdev = buf;
485 size_t anslen = rdev->ifrarplen;
489 if (((shost = malloc(rdev->physaddrlen)) == NULL) ||
490 ((ans = malloc(rdev->ifrarplen)) == NULL))
494 str = _link_ntoa(rdev->physaddr, str, rdev->physaddrlen,
498 " address %s", rdev->device, rdev->unit, str);
508 retval = dlpi_recv(rdev->dh_rarp, shost,
513 error("error in dlpi_recv %s: %s", rdev->dh_rarp,
519 if (anslen < rdev->ifrarplen)
525 else if (ans->ar_hln != rdev->physaddrlen)
541 rarp_request(rdev, ans, shost);
545 arp_request(rdev, ans, shost);
570 rarp_request(struct rarpdev *rdev, struct arphdr *rp, uchar_t *shost)
584 str = _link_ntoa(thap, str, rdev->physaddrlen, IFT_OTHER);
594 if ((memcmp(shap, thap, rdev->physaddrlen) != 0) ||
595 (memcmp(shap, shost, rdev->physaddrlen) != 0)) {
603 (void) memcpy(shap, rdev->physaddr, rdev->physaddrlen);
609 if (get_ipaddr(rdev, thap, tpap, &spa))
613 add_arp(rdev, tpap, thap);
624 rrp = calloc(1, sizeof (struct rarpreply) + rdev->physaddrlen +
625 rdev->ifrarplen);
629 rrp->arprep = rrp->lldest + rdev->physaddrlen;
636 rrp->rdev = rdev;
637 (void) memcpy(rrp->lldest, shost, rdev->physaddrlen);
638 (void) memcpy(rrp->arprep, rp, rdev->ifrarplen);
646 retval = dlpi_send(rdev->dh_rarp, rrp->lldest,
647 rdev->physaddrlen, rrp->arprep, rdev->ifrarplen, NULL);
655 delay_write(rdev, rrp);
663 add_arp(struct rarpdev *rdev, uchar_t *ip, uchar_t *laddr)
686 (void) memcpy(LLADDR(&ar.xarp_ha), laddr, rdev->physaddrlen);
687 ar.xarp_ha.sdl_alen = rdev->physaddrlen;
704 arp_request(struct rarpdev *rdev, struct arphdr *rp, uchar_t *shost)
719 for (ifdev = rdev->ifdev; ifdev != NULL; ifdev = ifdev->next) {
727 (void) memcpy(shap, rdev->physaddr, rdev->physaddrlen);
729 (void) memcpy(thap, rdev->physaddr, rdev->physaddrlen);
731 add_arp(rdev, tpap, thap);
736 rrp = calloc(1, sizeof (struct rarpreply) + rdev->physaddrlen +
737 rdev->ifrarplen);
741 rrp->arprep = rrp->lldest + rdev->physaddrlen;
742 rrp->rdev = rdev;
744 (void) memcpy(rrp->lldest, shost, rdev->physaddrlen);
745 (void) memcpy(rrp->arprep, rp, rdev->ifrarplen);
747 retval = dlpi_send(rdev->dh_rarp, rrp->lldest, rdev->physaddrlen,
748 rrp->arprep, rdev->ifrarplen, NULL);
760 struct rarpdev *rdev;
772 rdev = rrp->rdev;
780 err = dlpi_send(rdev->dh_rarp, rrp->lldest, rdev->physaddrlen,
781 rrp->arprep, rdev->ifrarplen, NULL);
791 delay_write(struct rarpdev *rdev, struct rarpreply *rrp)
907 get_ipaddr(struct rarpdev *rdev, uchar_t *laddr, uchar_t *ipp, ipaddr_t *ipaddr)
917 if (rdev->physaddrlen != ETHERADDRL) {
941 for (ifdev = rdev->ifdev; ifdev != NULL; ifdev = ifdev->next) {