File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / zebra / mtu_kvm.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    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>