亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mroute.c

?? OpenVPN is a robust and highly flexible tunneling application that uses all of the encryption, authe
?? C
字號:
/* *  OpenVPN -- An application to securely tunnel IP networks *             over a single TCP/UDP port, with support for SSL/TLS-based *             session authentication and key exchange, *             packet encryption, packet authentication, and *             packet compression. * *  Copyright (C) 2002-2004 James Yonan <jim@yonan.net> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifdef WIN32#include "config-win32.h"#else#include "config.h"#endif#include "syshead.h"#if P2MP#include "mroute.h"#include "proto.h"#include "error.h"#include "socket.h"#include "memdbg.h"static const uint8_t ethernet_bcast_addr[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };voidmroute_addr_init (struct mroute_addr *addr){  CLEAR (*addr);}/* * Don't learn certain addresses. */boolmroute_learnable_address (const struct mroute_addr *addr){  int i;  bool not_all_zeros = false;  bool not_all_ones = false;  for (i = 0; i < addr->len; ++i)    {      int b = addr->addr[i];      if (b != 0x00)	not_all_zeros = true;      if (b != 0xFF)	not_all_ones = true;    }  return not_all_zeros && not_all_ones;}/* * Given a raw packet in buf, return the src and dest * addresses of the packet. */unsigned intmroute_extract_addr_from_packet (struct mroute_addr *src,				 struct mroute_addr *dest,				 const struct buffer *buf,				 int tunnel_type){  unsigned int ret = 0;  if (tunnel_type == DEV_TYPE_TUN)    {      if (BLEN (buf) >= 1)	{	  switch (OPENVPN_IPH_GET_VER (*BPTR(buf)))	    {	    case 4:	      if (BLEN (buf) >= (int) sizeof (struct openvpn_iphdr))		{		  const struct openvpn_iphdr *ip = (const struct openvpn_iphdr *) BPTR (buf);		  if (src)		    {		      src->type = MR_ADDR_IPV4;		      src->netbits = 0;		      src->len = 4;		      memcpy (src->addr, &ip->saddr, 4);		    }		  if (dest)		    {		      dest->type = MR_ADDR_IPV4;		      dest->netbits = 0;		      dest->len = 4;		      memcpy (dest->addr, &ip->daddr, 4);		      /* mcast address? */		      if (((*(in_addr_t*)dest->addr) & htonl(IP_MCAST_SUBNET_MASK)) == htonl(IP_MCAST_NETWORK))			ret |= MROUTE_EXTRACT_MCAST;		      /* IGMP message? */		      if (ip->protocol == OPENVPN_IPPROTO_IGMP)			ret |= MROUTE_EXTRACT_IGMP;		    }		  ret |= MROUTE_EXTRACT_SUCCEEDED;		}	      break;	    case 6:	      {		msg (M_WARN, "Need IPv6 code in mroute_extract_addr_from_packet"); 		break;	      }	    }	}    }  else if (tunnel_type == DEV_TYPE_TAP)    {      if (BLEN (buf) >= (int) sizeof (struct openvpn_ethhdr))	{	  const struct openvpn_ethhdr *eth = (const struct openvpn_ethhdr *) BPTR (buf);	  if (src)	    {	      src->type = MR_ADDR_ETHER;	      src->netbits = 0;	      src->len = 6;	      memcpy (src->addr, eth->source, 6);	    }	  if (dest)	    {	      dest->type = MR_ADDR_ETHER;	      dest->netbits = 0;	      dest->len = 6;	      memcpy (dest->addr, eth->dest, 6);	      /* broadcast packet? */	      if (memcmp (eth->dest, ethernet_bcast_addr, 6) == 0)		ret |= MROUTE_EXTRACT_BCAST;	    }	  	  ret |= MROUTE_EXTRACT_SUCCEEDED;	}    }  return ret;}/* * Translate a struct sockaddr_in (saddr) * to a struct mroute_addr (addr). */boolmroute_extract_sockaddr_in (struct mroute_addr *addr, const struct sockaddr_in *saddr, bool use_port){  if (saddr->sin_family == AF_INET)    {      if (use_port)	{	  addr->type = MR_ADDR_IPV4 | MR_WITH_PORT;	  addr->netbits = 0;	  addr->len = 6;	  memcpy (addr->addr, &saddr->sin_addr.s_addr, 4);	  memcpy (addr->addr + 4, &saddr->sin_port, 2);	}      else	{	  addr->type = MR_ADDR_IPV4;	  addr->netbits = 0;	  addr->len = 4;	  memcpy (addr->addr, &saddr->sin_addr.s_addr, 4);	}      return true;    }  return false;}/* * Zero off the host bits in an address, leaving * only the network bits, using the netbits member of * struct mroute_addr as the controlling parameter. */voidmroute_addr_mask_host_bits (struct mroute_addr *ma){  in_addr_t addr = ntohl(*(in_addr_t*)ma->addr);  ASSERT ((ma->type & MR_ADDR_MASK) == MR_ADDR_IPV4);  addr &= netbits_to_netmask (ma->netbits);  *(in_addr_t*)ma->addr = htonl (addr);}/* * The mroute_addr hash function takes into account the * address type, number of bits in the network address, * and the actual address. */uint32_tmroute_addr_hash_function (const void *key, uint32_t iv){  return hash_func (mroute_addr_hash_ptr ((const struct mroute_addr *) key),		    mroute_addr_hash_len ((const struct mroute_addr *) key),		    iv);}boolmroute_addr_compare_function (const void *key1, const void *key2){  return mroute_addr_equal ((const struct mroute_addr *) key1,			    (const struct mroute_addr *) key2);}const char *mroute_addr_print (const struct mroute_addr *ma,		   struct gc_arena *gc){  struct buffer out = alloc_buf_gc (64, gc);  if (ma)    {      struct mroute_addr maddr = *ma;      switch (maddr.type & MR_ADDR_MASK)	{	case MR_ADDR_ETHER:	  buf_printf (&out, "%s", format_hex_ex (ma->addr, 6, 0, 1, ":", gc)); 	  break;	case MR_ADDR_IPV4:	  {	    struct buffer buf;	    in_addr_t addr;	    int port;	    bool status;	    buf_set_read (&buf, maddr.addr, maddr.len);	    addr = buf_read_u32 (&buf, &status);	    if (status)	      {		buf_printf (&out, "%s", print_in_addr_t (addr, true, gc));		if (maddr.type & MR_WITH_NETBITS)		  buf_printf (&out, "/%d", maddr.netbits);	      }	    if (maddr.type & MR_WITH_PORT)	      {		port = buf_read_u16 (&buf);		if (port >= 0)		  buf_printf (&out, ":%d", port);	      }	  }	  break;	case MR_ADDR_IPV6:	  buf_printf (&out, "IPV6"); 	  break;	default:	  buf_printf (&out, "UNKNOWN"); 	  break;	}      return BSTR (&out);    }  else    return "[NULL]";}/* * mroute_helper's main job is keeping track of * currently used CIDR netlengths, so we don't * have to cycle through all 33. */struct mroute_helper *mroute_helper_init (int ageable_ttl_secs){  struct mroute_helper *mh;  ALLOC_OBJ_CLEAR (mh, struct mroute_helper);  //mutex_init (&mh->mutex);  mh->ageable_ttl_secs = ageable_ttl_secs;  return mh;}static voidmroute_helper_regenerate (struct mroute_helper *mh){  int i, j = 0;  for (i = MR_HELPER_NET_LEN - 1; i >= 0; --i)    {      if (mh->net_len_refcount[i] > 0)	mh->net_len[j++] = (uint8_t) i;    }  mh->n_net_len = j;  if (check_debug_level (D_MULTI_DEBUG))    {      struct gc_arena gc = gc_new ();      struct buffer out = alloc_buf_gc (256, &gc);      buf_printf (&out, "MROUTE CIDR netlen:");      for (i = 0; i < mh->n_net_len; ++i)	{	  buf_printf (&out, " /%d", mh->net_len[i]);	}      msg (D_MULTI_DEBUG, "%s", BSTR (&out));      gc_free (&gc);    }}voidmroute_helper_add_iroute (struct mroute_helper *mh, const struct iroute *ir){  if (ir->netbits >= 0)    {      ASSERT (ir->netbits < MR_HELPER_NET_LEN);      mroute_helper_lock (mh);      ++mh->cache_generation;      ++mh->net_len_refcount[ir->netbits];      if (mh->net_len_refcount[ir->netbits] == 1)	mroute_helper_regenerate (mh);      mroute_helper_unlock (mh);    }}voidmroute_helper_del_iroute (struct mroute_helper *mh, const struct iroute *ir){  if (ir->netbits >= 0)    {      ASSERT (ir->netbits < MR_HELPER_NET_LEN);      mroute_helper_lock (mh);      ++mh->cache_generation;      --mh->net_len_refcount[ir->netbits];      ASSERT (mh->net_len_refcount[ir->netbits] >= 0);      if (!mh->net_len_refcount[ir->netbits])	mroute_helper_regenerate (mh);      mroute_helper_unlock (mh);    }}voidmroute_helper_free (struct mroute_helper *mh){  //mutex_destroy (&mh->mutex);  free (mh);}#elsestatic void dummy(void) {}#endif /* P2MP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体健美xxxx欧美裸体表演| 在线综合视频播放| 欧美日韩和欧美的一区二区| 日韩欧美一区二区免费| 国产精品乱码久久久久久| 天堂蜜桃91精品| 99精品黄色片免费大全| 欧美一级电影网站| 亚州成人在线电影| 99久久精品国产一区| 久久亚洲欧美国产精品乐播| 天堂va蜜桃一区二区三区漫画版| 色偷偷久久一区二区三区| 久久精品欧美一区二区三区不卡 | 蜜臀av性久久久久蜜臀aⅴ | 亚洲女子a中天字幕| 国产盗摄精品一区二区三区在线 | 91精品国产91久久久久久一区二区 | 久久精品99国产国产精| 欧美另类高清zo欧美| 一区二区三区日本| 色综合天天综合网国产成人综合天 | 轻轻草成人在线| 欧美日韩不卡在线| 亚洲综合在线五月| 在线观看欧美黄色| 一级中文字幕一区二区| 色天使色偷偷av一区二区| 亚洲天堂中文字幕| 色www精品视频在线观看| 国产精品久久午夜| 成人激情开心网| 国产精品狼人久久影院观看方式| 粉嫩av一区二区三区粉嫩| 国产精品免费人成网站| 成人免费毛片嘿嘿连载视频| 国产精品污www在线观看| av激情综合网| 亚洲男女一区二区三区| 在线观看91视频| 日韩中文字幕一区二区三区| 欧美剧情片在线观看| 男女视频一区二区| 26uuu国产日韩综合| 国产成人综合网站| 中文字幕日韩欧美一区二区三区| 91在线一区二区三区| 一区二区三区免费网站| 69久久夜色精品国产69蝌蚪网| 日韩国产欧美三级| 亚洲精品在线电影| 成人午夜激情片| 亚洲午夜视频在线| 欧美大片一区二区| 成人激情免费电影网址| 亚洲成人午夜电影| 精品粉嫩超白一线天av| 成人18视频在线播放| 亚洲国产精品久久不卡毛片| 精品剧情v国产在线观看在线| 成人激情午夜影院| 午夜精品久久久久久久| 久久久久久亚洲综合| 欧美在线观看一区| 国产毛片精品视频| 亚洲免费看黄网站| 精品久久人人做人人爰| a4yy欧美一区二区三区| 日韩电影在线一区| 亚洲欧洲国产日韩| 日韩视频中午一区| 色呦呦国产精品| 国产精选一区二区三区| 亚洲国产一二三| 日本一区二区三区高清不卡| 欧美日韩一区在线| 国产成人综合网站| 免费成人你懂的| 亚洲色图在线视频| 久久久久免费观看| 欧美一区三区四区| 日本韩国精品在线| 国产成人高清在线| 视频在线观看一区二区三区| 亚洲欧美日韩国产一区二区三区| 欧美刺激脚交jootjob| 91精品福利视频| 成人三级伦理片| 国产久卡久卡久卡久卡视频精品| 午夜日韩在线电影| 亚洲免费在线看| 国产精品久久毛片av大全日韩| 日韩欧美在线综合网| 欧美日韩国产中文| 色综合天天综合狠狠| 丁香一区二区三区| 国产精品一区二区免费不卡| 日本亚洲最大的色成网站www| 一区二区在线观看视频在线观看| 国产欧美精品一区二区色综合 | 日韩精品一区二区三区中文不卡| 91久久精品国产91性色tv| av亚洲精华国产精华精| 成人性生交大片免费看在线播放 | 国产日韩一级二级三级| 欧美mv日韩mv国产网站app| 在线综合+亚洲+欧美中文字幕| 欧美午夜精品免费| 欧美在线不卡视频| 欧美亚洲日本一区| 日本高清不卡在线观看| 在线一区二区三区四区五区| 一本一道综合狠狠老| 色婷婷综合久久| 欧美日韩中字一区| 欧美日韩高清一区| 91精品久久久久久久99蜜桃| 欧美精品欧美精品系列| 制服丝袜国产精品| 日韩亚洲电影在线| 精品国产青草久久久久福利| 精品国产露脸精彩对白| 久久久噜噜噜久久人人看| 中文幕一区二区三区久久蜜桃| 欧美极品另类videosde| 国产精品成人午夜| 一区二区三区毛片| 日韩福利视频导航| 国产一区二区伦理片| 成人av片在线观看| 欧美性猛交xxxxxx富婆| 欧美一卡在线观看| 久久久久久日产精品| 成人免费在线视频观看| 亚洲观看高清完整版在线观看| 免费在线观看一区二区三区| 国产精品99久久久久| 在线影视一区二区三区| 日韩欧美精品三级| 国产精品短视频| 亚洲成在线观看| 国产精品夜夜嗨| 欧美私人免费视频| 26uuu精品一区二区三区四区在线| 国产精品电影一区二区| 日韩国产欧美在线观看| 粉嫩嫩av羞羞动漫久久久| 欧美久久一区二区| 欧美国产在线观看| 亚洲大片在线观看| 粗大黑人巨茎大战欧美成人| 欧美特级限制片免费在线观看| 精品蜜桃在线看| 亚洲综合激情网| 国产一区二区网址| 欧美午夜精品一区二区蜜桃| 久久久久九九视频| 日韩专区一卡二卡| 99re亚洲国产精品| 久久蜜桃av一区精品变态类天堂| 一二三四社区欧美黄| 国产成人在线影院| 5858s免费视频成人| 亚洲欧美在线观看| 精品综合免费视频观看| 欧美性色综合网| 国产精品美女久久久久久2018| 毛片av中文字幕一区二区| 色婷婷激情久久| 国产日韩亚洲欧美综合| 青青草国产精品亚洲专区无| 91在线高清观看| 国产日韩v精品一区二区| 免费成人在线观看视频| 欧美三级乱人伦电影| 国产精品灌醉下药二区| 国产成人在线视频网站| 日韩精品中文字幕一区| 日日欢夜夜爽一区| 欧美午夜精品一区| 夜夜精品视频一区二区 | 国产在线播精品第三| 欧美喷潮久久久xxxxx| 亚洲综合视频在线观看| 91一区二区在线观看| 国产精品少妇自拍| 国产91露脸合集magnet| 国产午夜一区二区三区| 韩国理伦片一区二区三区在线播放| 欧美疯狂做受xxxx富婆| 午夜精品久久久久久久久久久| 欧美视频精品在线观看| 亚洲第一福利视频在线| 欧美日韩综合不卡| 午夜视频久久久久久| 欧美一区二区三区思思人| 亚洲高清在线精品| 555夜色666亚洲国产免| 免费观看成人av| 欧美精品一区二区三区一线天视频|