545 if (IN6_IS_ADDR_UNSPECIFIED(&otp->otp_ip) && otp->otp_port == 0)
546 otc.otc_entry.otce_flags |= OVERLAY_TARGET_CACHE_ROUTER;
547 bcopy(mac, otc.otc_entry.otce_mac.otm_mac, ETHERADDRL);
548 bcopy(otp, &otc.otc_entry.otce_dest, sizeof (overlay_target_point_t));
549
550 ret = ioctl(vip->vdi_overlayfd, OVERLAY_TARG_CACHE_SET, &otc);
551 if (ret != 0) {
552 switch (errno) {
553 case EBADF:
554 case EFAULT:
555 case ENOTSUP:
556 libvarpd_panic("received bad errno from "
557 "OVERLAY_TARG_CACHE_SET: %d", errno);
558 default:
559 break;
560 }
561 }
562 }
563
564 void
565 libvarpd_fma_degrade(varpd_provider_handle_t *vph, const char *msg)
566 {
567 int ret;
568 varpd_instance_t *inst = (varpd_instance_t *)vph;
569
570 ret = libvarpd_overlay_degrade(inst, msg);
571 switch (ret) {
572 case ENOENT:
573 case EFAULT:
574 libvarpd_panic("received bad errno from degrade ioctl: %d",
575 errno);
576 default:
577 break;
578 }
579 }
580
581 void
582 libvarpd_fma_restore(varpd_provider_handle_t *vph)
583 {
584 int ret;
|
545 if (IN6_IS_ADDR_UNSPECIFIED(&otp->otp_ip) && otp->otp_port == 0)
546 otc.otc_entry.otce_flags |= OVERLAY_TARGET_CACHE_ROUTER;
547 bcopy(mac, otc.otc_entry.otce_mac.otm_mac, ETHERADDRL);
548 bcopy(otp, &otc.otc_entry.otce_dest, sizeof (overlay_target_point_t));
549
550 ret = ioctl(vip->vdi_overlayfd, OVERLAY_TARG_CACHE_SET, &otc);
551 if (ret != 0) {
552 switch (errno) {
553 case EBADF:
554 case EFAULT:
555 case ENOTSUP:
556 libvarpd_panic("received bad errno from "
557 "OVERLAY_TARG_CACHE_SET: %d", errno);
558 default:
559 break;
560 }
561 }
562 }
563
564 void
565 libvarpd_route_flush(varpd_provider_handle_t *vph, uint8_t *srcip,
566 uint8_t *dstip, uint8_t src_prefixlen, uint8_t dst_prefixlen,
567 uint16_t vlan_id)
568 {
569 varpd_instance_t *inst = (varpd_instance_t *)vph;
570 varpd_impl_t *vip = inst->vri_impl;
571 overlay_targ_cache_net_t otcn;
572 overlay_targ_cache_net_entry_t *otcne;
573 int ret;
574
575 otcn.otcn_linkid = inst->vri_linkid;
576 otcne = &otcn.otcn_entry;
577 bcopy(srcip, &otcne->otcne_src, sizeof (in6_addr_t));
578 bcopy(dstip, &otcne->otcne_dst, sizeof (in6_addr_t));
579 otcne->otcne_vlan = vlan_id;
580 otcne->otcne_src_prefixlen = src_prefixlen;
581 otcne->otcne_dst_prefixlen = dst_prefixlen;
582
583 ret = ioctl(vip->vdi_overlayfd, OVERLAY_TARG_CACHE_REMOVE_NET, &otcn);
584 if (ret != 0) {
585 /* XXX KEBE ASKS, any harmless error cases? */
586 libvarpd_panic("received bad errno from "
587 "OVERLAY_TARG_CACHE_REMOVE_NET: %d - %s", errno,
588 strerror(errno));
589 }
590 }
591
592 void
593 libvarpd_fma_degrade(varpd_provider_handle_t *vph, const char *msg)
594 {
595 int ret;
596 varpd_instance_t *inst = (varpd_instance_t *)vph;
597
598 ret = libvarpd_overlay_degrade(inst, msg);
599 switch (ret) {
600 case ENOENT:
601 case EFAULT:
602 libvarpd_panic("received bad errno from degrade ioctl: %d",
603 errno);
604 default:
605 break;
606 }
607 }
608
609 void
610 libvarpd_fma_restore(varpd_provider_handle_t *vph)
611 {
612 int ret;
|