首页 编程 软件学院 查看内容

IOS获取本地IP地址以及网关IP地址

2015-4-13 16:51 1731 2

摘要: IOS获取本地IP地址以及网关IP地址 route.h如下: [objc] view plaincopy/*  * Copyright (c)&...
关键词: nbsp define RTM route struct RTF int nbs routing metrics

IOS获取本地IP地址以及网关IP地址 route.h如下: [objc] view plaincopy/*  * Copyright (c) 2000-2008 Apple Inc. All rights reserved.  *  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@  *  * This file contains Original Code and/or Modifications of Original Code  * as defined in and that are subject to the Apple Public Source License  * Version 2.0 (the 'License'). You may not use this file except in  * compliance with the License. The rights granted to you under the License  * may not be used to create, or enable the creation or redistribution of,  * unlawful or unlicensed copies of an Apple operating system, or to  * circumvent, violate, or enable the circumvention or violation of, any  * terms of an Apple operating system software license agreement.  *  * Please obtain a copy of the License at  * http://www.opensource.apple.com/apsl/ and read it before using this file.  *  * The Original Code and all software distributed under the License are  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  * Please see the License for the specific language governing rights and  * limitations under the License.  *  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@  */  /*  * Copyright (c) 1980, 1986, 1993  *  The Regents of the University of California.  All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  * 3. All advertising materials mentioning features or use of this software  *    must display the following acknowledgement:  *  This product includes software developed by the University of  *  California, Berkeley and its contributors.  * 4. Neither the name of the University nor the names of its contributors  *    may be used to endorse or promote products derived from this software  *    without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  * SUCH DAMAGE.  *  *  @(#)route.h 8.3 (Berkeley) 4/19/94  * $FreeBSD: src/sys/net/route.h,v 1.36.2.1 2000/08/16 06:14:23 jayanth Exp $  */    #ifndef _NET_ROUTE_H_  #define _NET_ROUTE_H_  #include <sys/appleapiopts.h>  #include <stdint.h>  #include <sys/types.h>  #include <sys/socket.h>    /*  * Kernel resident routing tables.  *  * The routing tables are initialized when interface addresses  * are set by making entries for all directly connected interfaces.  */    /*  * A route consists of a destination address and a reference  * to a routing entry.  These are often held by protocols  * in their control blocks, e.g. inpcb.  */  #ifdef PRIVATE  struct  rtentry;  struct route {      /*      * N.B: struct route must begin with ro_rt and ro_flags      * because the code does some casts of a 'struct route_in6 *'      * to a 'struct route *'.      */      struct rtentry  *ro_rt;      uint32_t    ro_flags;   /* route flags (see below) */      struct sockaddr ro_dst;  };    #define ROF_SRCIF_SELECTED  0x1 /* source interface was selected */    #else  struct route;  #endif /* PRIVATE */    /*  * These numbers are used by reliable protocols for determining  * retransmission behavior and are included in the routing structure.  */  struct rt_metrics {      u_int32_t   rmx_locks;  /* Kernel must leave these values alone */      u_int32_t   rmx_mtu;    /* MTU for this path */      u_int32_t   rmx_hopcount;   /* max hops expected */      int32_t     rmx_expire; /* lifetime for route, e.g. redirect */      u_int32_t   rmx_recvpipe;   /* inbound delay-bandwidth product */      u_int32_t   rmx_sendpipe;   /* outbound delay-bandwidth product */      u_int32_t   rmx_ssthresh;   /* outbound gateway buffer limit */      u_int32_t   rmx_rtt;    /* estimated round trip time */      u_int32_t   rmx_rttvar; /* estimated rtt variance */      u_int32_t   rmx_pksent; /* packets sent using this route */      u_int32_t   rmx_filler[4];  /* will be used for T/TCP later */  };    /*  * rmx_rtt and rmx_rttvar are stored as microseconds;  */  #define RTM_RTTUNIT 1000000 /* units for rtt, rttvar, as units per sec */    /*  * We distinguish between routes to hosts and routes to networks,  * preferring the former if available.  For each route we infer  * the interface to use from the gateway address supplied when  * the route was entered.  Routes that forward packets through  * gateways are marked so that the output routines know to address the  * gateway rather than the ultimate destination.  */  #ifdef KERNEL_PRIVATE  #include <kern/locks.h>  #ifndef RNF_NORMAL  #include <net/radix.h>  #endif  /*  * Kernel routing entry structure (private).  */  struct rtentry {      struct  radix_node rt_nodes[2]; /* tree glue, and other values */  #define rt_key(r)   ((struct sockaddr *)((r)->rt_nodes->rn_key))  #define rt_mask(r)  ((struct sockaddr *)((r)->rt_nodes->rn_mask))      struct  sockaddr *rt_gateway;   /* value */      int32_t rt_refcnt;      /* # held references */      uint32_t rt_flags;      /* up/down?, host/net */      struct  ifnet *rt_ifp;      /* the answer: interface to use */      struct  ifaddr *rt_ifa;     /* the answer: interface addr to use */      struct  sockaddr *rt_genmask;   /* for generation of cloned routes */      void    *rt_llinfo;     /* pointer to link level info cache */      void    (*rt_llinfo_free)(voidvoid *); /* link level info free function */      struct  rt_metrics rt_rmx;  /* metrics used by rx'ing protocols */      struct  rtentry *rt_gwroute;    /* implied entry for gatewayed routes */      struct  rtentry *rt_parent; /* cloning parent of this route */      uint32_t generation_id;     /* route generation id */      /*      * See bsd/net/route.c for synchronization notes.      */      decl_lck_mtx_data(, rt_lock);   /* lock for routing entry */  };  #endif /* KERNEL_PRIVATE */    #ifdef KERNEL_PRIVATE  #define rt_use rt_rmx.rmx_pksent  #endif /* KERNEL_PRIVATE */    #define RTF_UP      0x1     /* route usable */  #define RTF_GATEWAY 0x2     /* destination is a gateway */  #define RTF_HOST    0x4     /* host entry (net otherwise) */  #define RTF_REJECT  0x8     /* host or net unreachable */  #define RTF_DYNAMIC 0x10        /* created dynamically (by redirect) */  #define RTF_MODIFIED    0x20        /* modified dynamically (by redirect) */  #define RTF_DONE    0x40        /* message confirmed */  #define RTF_DELCLONE    0x80        /* delete cloned route */  #define RTF_CLONING 0x100       /* generate new routes on use */  #define RTF_XRESOLVE    0x200       /* external daemon resolves name */  #define RTF_LLINFO  0x400       /* generated by link layer (e.g. ARP) */  #define RTF_STATIC  0x800       /* manually added */  #define RTF_BLACKHOLE   0x1000      /* just discard pkts (during updates) */  #define RTF_PROTO2  0x4000      /* protocol specific routing flag */  #define RTF_PROTO1  0x8000      /* protocol specific routing flag */    #define RTF_PRCLONING   0x10000     /* protocol requires cloning */  #define RTF_WASCLONED   0x20000     /* route generated through cloning */  #define RTF_PROTO3  0x40000     /* protocol specific routing flag */  /* 0x80000 unused */  #define RTF_PINNED  0x100000    /* future use */  #define RTF_LOCAL   0x200000    /* route represents a local address */  #define RTF_BROADCAST   0x400000    /* route represents a bcast address */  #define RTF_MULTICAST   0x800000    /* route represents a mcast address */  #define RTF_IFSCOPE 0x1000000   /* has valid interface scope */  #define RTF_CONDEMNED   0x2000000   /* defunct; no longer modifiable */  /* 0x4000000 and up unassigned */    /*  * Routing statistics.  */  struct  rtstat {      short   rts_badredirect;    /* bogus redirect calls */      short   rts_dynamic;        /* routes created by redirects */      short   rts_newgateway;     /* routes modified by redirects */      short   rts_unreach;        /* lookups which failed */      short   rts_wildcard;       /* lookups satisfied by a wildcard */  };    /*  * Structures for routing messages.  */  struct rt_msghdr {      u_short rtm_msglen;     /* to skip over non-understood messages */      u_char  rtm_version;        /* future binary compatibility */      u_char  rtm_type;       /* message type */      u_short rtm_index;      /* index for associated ifp */      int rtm_flags;      /* flags, incl. kern & message, e.g. DONE */      int rtm_addrs;      /* bitmask identifying sockaddrs in msg */      pid_t   rtm_pid;        /* identify sender */      int rtm_seq;        /* for sender to identify action */      int rtm_errno;      /* why failed */      int rtm_use;        /* from rtentry */      u_int32_t rtm_inits;        /* which metrics we are initializing */      struct rt_metrics rtm_rmx;  /* metrics themselves */  };    struct rt_msghdr2 {      u_short rtm_msglen;     /* to skip over non-understood messages */      u_char  rtm_version;        /* future binary compatibility */      u_char  rtm_type;       /* message type */      u_short rtm_index;      /* index for associated ifp */      int rtm_flags;      /* flags, incl. kern & message, e.g. DONE */      int rtm_addrs;      /* bitmask identifying sockaddrs in msg */      int32_t rtm_refcnt;     /* reference count */      int rtm_parentflags;    /* flags of the parent route */      int rtm_reserved;       /* reserved field set to 0 */      int rtm_use;        /* from rtentry */      u_int32_t rtm_inits;        /* which metrics we are initializing */      struct rt_metrics rtm_rmx;  /* metrics themselves */  };      #define RTM_VERSION 5   /* Up the ante and ignore older versions */    /*  * Message types.  */  #define RTM_ADD     0x1 /* Add Route */  #define RTM_DELETE  0x2 /* Delete Route */  #define RTM_CHANGE  0x3 /* Change Metrics or flags */  #define RTM_GET     0x4 /* Report Metrics */  #define RTM_LOSING  0x5 /* Kernel Suspects Partitioning */  #define RTM_REDIRECT    0x6 /* Told to use different route */  #define RTM_MISS    0x7 /* Lookup failed on this address */  #define RTM_LOCK    0x8 /* fix specified metrics */  #define RTM_OLDADD  0x9 /* caused by SIOCADDRT */  #define RTM_OLDDEL  0xa /* caused by SIOCDELRT */  #define RTM_RESOLVE 0xb /* req to resolve dst to LL addr */  #define RTM_NEWADDR 0xc /* address being added to iface */  #define RTM_DELADDR 0xd /* address being removed from iface */  #define RTM_IFINFO  0xe /* iface going up/down etc. */  #define RTM_NEWMADDR    0xf /* mcast group membership being added to if */  #define RTM_DELMADDR    0x10    /* mcast group membership being deleted */  #ifdef PRIVATE  #define RTM_GET_SILENT  0x11  #endif /* PRIVATE */  #define RTM_IFINFO2 0x12    /* */  #define RTM_NEWMADDR2   0x13    /* */  #define RTM_GET2    0x14    /* */    /*  * Bitmask values for rtm_inits and rmx_locks.  */  #define RTV_MTU     0x1 /* init or lock _mtu */  #define RTV_HOPCOUNT    0x2 /* init or lock _hopcount */  #define RTV_EXPIRE  0x4 /* init or lock _expire */  #define RTV_RPIPE   0x8 /* init or lock _recvpipe */  #define RTV_SPIPE   0x10    /* init or lock _s
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

返回顶部