Annotation of embedaddon/quagga/zebra/mtu_kvm.c, revision 1.1
1.1 ! misho 1: /* MTU get using kvm_read.
! 2: * Copyright (C) 1999 Kunihiro Ishiguro
! 3: *
! 4: * This file is part of GNU Zebra.
! 5: *
! 6: * GNU Zebra is free software; you can redistribute it and/or modify it
! 7: * under the terms of the GNU General Public License as published by the
! 8: * Free Software Foundation; either version 2, or (at your option) any
! 9: * later version.
! 10: *
! 11: * GNU Zebra is distributed in the hope that it will be useful, but
! 12: * WITHOUT ANY WARRANTY; without even the implied warranty of
! 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 14: * General Public License for more details.
! 15: *
! 16: * You should have received a copy of the GNU General Public License
! 17: * along with GNU Zebra; see the file COPYING. If not, write to the Free
! 18: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 19: * 02111-1307, USA.
! 20: */
! 21:
! 22: #include <zebra.h>
! 23:
! 24: #include <kvm.h>
! 25: #include <limits.h>
! 26: #include <fcntl.h>
! 27:
! 28: #include "if.h"
! 29:
! 30: /* get interface MTU to use kvm_read */
! 31: void
! 32: if_kvm_get_mtu (struct interface *ifp)
! 33: {
! 34: kvm_t *kvmd;
! 35: struct ifnet ifnet;
! 36: unsigned long ifnetaddr;
! 37: int len;
! 38:
! 39: char ifname[IFNAMSIZ];
! 40: char tname[INTERFACE_NAMSIZ + 1];
! 41: char buf[_POSIX2_LINE_MAX];
! 42:
! 43: struct nlist nl[] =
! 44: {
! 45: {"_ifnet"},
! 46: {""}
! 47: };
! 48:
! 49: ifp->mtu6 = ifp->mtu = -1;
! 50:
! 51: kvmd = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, buf);
! 52:
! 53: if (kvmd == NULL)
! 54: return ;
! 55:
! 56: kvm_nlist(kvmd, nl);
! 57:
! 58: ifnetaddr = nl[0].n_value;
! 59:
! 60: if (kvm_read(kvmd, ifnetaddr, (char *)&ifnetaddr, sizeof ifnetaddr) < 0)
! 61: {
! 62: kvm_close (kvmd);
! 63: return ;
! 64: }
! 65:
! 66: while(ifnetaddr != 0)
! 67: {
! 68: if (kvm_read (kvmd, ifnetaddr, (char *)&ifnet, sizeof ifnet) < 0)
! 69: {
! 70: kvm_close (kvmd);
! 71: return ;
! 72: }
! 73:
! 74: if (kvm_read (kvmd, (u_long)ifnet.if_name, ifname, IFNAMSIZ) < 0)
! 75: {
! 76: kvm_close (kvmd);
! 77: return ;
! 78: }
! 79:
! 80: len = snprintf (tname, INTERFACE_NAMSIZ + 1,
! 81: "%s%d", ifname, ifnet.if_unit);
! 82:
! 83: if (strncmp (tname, ifp->name, len) == 0)
! 84: break;
! 85:
! 86: ifnetaddr = (u_long)ifnet.if_next;
! 87: }
! 88:
! 89: kvm_close (kvmd);
! 90:
! 91: if (ifnetaddr == 0)
! 92: {
! 93: return ;
! 94: }
! 95:
! 96: ifp->mtu6 = ifp->mtu = ifnet.if_mtu;
! 97: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>