⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bgp_mplsvpn.c

📁 大名鼎鼎的路由器源码。程序分ZEBRA、OSPFRIP等3个包。程序框架采用一个路由协议一个进程的方式
💻 C
📖 第 1 页 / 共 2 页
字号:
                    vty_out (vty, "Route Distinguisher: ");                    if (type == RD_TYPE_AS)                      vty_out (vty, "%d:%d", rd_as.as, rd_as.val);                    else if (type == RD_TYPE_IP)                      vty_out (vty, "%s:%d", inet_ntoa (rd_ip.ip), rd_ip.val);                    vty_out (vty, "%s", VTY_NEWLINE);                    rd_header = 0;                  }                route_vty_out_tmp (vty, &rm->p, attr, SAFI_MPLS_VPN);              }        }    }  return CMD_SUCCESS;}enum bgp_show_type{  bgp_show_type_normal,  bgp_show_type_regexp,  bgp_show_type_prefix_list,  bgp_show_type_filter_list,  bgp_show_type_neighbor,  bgp_show_type_cidr_only,  bgp_show_type_prefix_longer,  bgp_show_type_community_all,  bgp_show_type_community,  bgp_show_type_community_exact,  bgp_show_type_community_list,  bgp_show_type_community_list_exact};intbgp_show_mpls_vpn (struct vty *vty, struct prefix_rd *prd, enum bgp_show_type type,		   void *output_arg, int tags){  struct bgp *bgp;  struct bgp_table *table;  struct bgp_node *rn;  struct bgp_node *rm;  struct bgp_info *ri;  int rd_header;  int header = 1;  char v4_header[] = "   Network          Next Hop            Metric LocPrf Weight Path%s";  char v4_header_tag[] = "   Network          Next Hop      In tag/Out tag%s";  bgp = bgp_get_default ();  if (bgp == NULL)    {      vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);      return CMD_WARNING;    }    for (rn = bgp_table_top (bgp->rib[AFI_IP][SAFI_MPLS_VPN]); rn; rn = bgp_route_next (rn))    {      if (prd && memcmp (rn->p.u.val, prd->val, 8) != 0)	continue;      if ((table = rn->info) != NULL)	{	  rd_header = 1;	  for (rm = bgp_table_top (table); rm; rm = bgp_route_next (rm))	    for (ri = rm->info; ri; ri = ri->next)	      {		if (type == bgp_show_type_neighbor)		  {		    union sockunion *su = output_arg;		    if (ri->peer->su_remote == NULL || ! sockunion_same(ri->peer->su_remote, su))		      continue;		  }		if (header)		  {		    if (tags)		      vty_out (vty, v4_header_tag, VTY_NEWLINE);		    else		      {			vty_out (vty, "BGP table version is 0, local router ID is %s%s",				 inet_ntoa (bgp->router_id), VTY_NEWLINE);			vty_out (vty, "Status codes: s suppressed, d damped, h history, * valid, > best, i - internal%s",				 VTY_NEWLINE);			vty_out (vty, "Origin codes: i - IGP, e - EGP, ? - incomplete%s%s",				 VTY_NEWLINE, VTY_NEWLINE);			vty_out (vty, v4_header, VTY_NEWLINE);		      }		    header = 0;		  }		if (rd_header)		  {		    u_int16_t type;		    struct rd_as rd_as;		    struct rd_ip rd_ip;		    u_char *pnt;		    pnt = rn->p.u.val;		    /* Decode RD type. */		    type = decode_rd_type (pnt);		    /* Decode RD value. */		    if (type == RD_TYPE_AS)		      decode_rd_as (pnt + 2, &rd_as);		    else if (type == RD_TYPE_IP)		      decode_rd_ip (pnt + 2, &rd_ip);		    vty_out (vty, "Route Distinguisher: ");		    if (type == RD_TYPE_AS)		      vty_out (vty, "%d:%d", rd_as.as, rd_as.val);		    else if (type == RD_TYPE_IP)		      vty_out (vty, "%s:%d", inet_ntoa (rd_ip.ip), rd_ip.val);		  		    vty_out (vty, "%s", VTY_NEWLINE);		  		    rd_header = 0;		  }	        if (tags)		  route_vty_out_tag (vty, &rm->p, ri, 0, SAFI_MPLS_VPN);	        else		  route_vty_out (vty, &rm->p, ri, 0, SAFI_MPLS_VPN);	      }        }    }  return CMD_SUCCESS;}DEFUN (show_ip_bgp_vpnv4_all,       show_ip_bgp_vpnv4_all_cmd,       "show ip bgp vpnv4 all",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information about all VPNv4 NLRIs\n"){  return bgp_show_mpls_vpn (vty, NULL, bgp_show_type_normal, NULL, 0);}DEFUN (show_ip_bgp_vpnv4_rd,       show_ip_bgp_vpnv4_rd_cmd,       "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information for a route distinguisher\n"       "VPN Route Distinguisher\n"){  int ret;  struct prefix_rd prd;  ret = str2prefix_rd (argv[0], &prd);  if (! ret)    {      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);      return CMD_WARNING;    }  return bgp_show_mpls_vpn (vty, &prd, bgp_show_type_normal, NULL, 0);}DEFUN (show_ip_bgp_vpnv4_all_tags,       show_ip_bgp_vpnv4_all_tags_cmd,       "show ip bgp vpnv4 all tags",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information about all VPNv4 NLRIs\n"       "Display BGP tags for prefixes\n"){  return bgp_show_mpls_vpn (vty, NULL, bgp_show_type_normal, NULL,  1);}DEFUN (show_ip_bgp_vpnv4_rd_tags,       show_ip_bgp_vpnv4_rd_tags_cmd,       "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn tags",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information for a route distinguisher\n"       "VPN Route Distinguisher\n"       "Display BGP tags for prefixes\n"){  int ret;  struct prefix_rd prd;  ret = str2prefix_rd (argv[0], &prd);  if (! ret)    {      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);      return CMD_WARNING;    }  return bgp_show_mpls_vpn (vty, &prd, bgp_show_type_normal, NULL, 1);}DEFUN (show_ip_bgp_vpnv4_all_neighbor_routes,       show_ip_bgp_vpnv4_all_neighbor_routes_cmd,       "show ip bgp vpnv4 all neighbors A.B.C.D routes",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information about all VPNv4 NLRIs\n"       "Detailed information on TCP and BGP neighbor connections\n"       "Neighbor to display information about\n"       "Display routes learned from neighbor\n"){  union sockunion *su;  struct peer *peer;    su = sockunion_str2su (argv[0]);  if (su == NULL)    {      vty_out (vty, "Malformed address: %s%s", argv[0], VTY_NEWLINE);               return CMD_WARNING;    }  peer = peer_lookup (NULL, su);  if (! peer || ! peer->afc[AFI_IP][SAFI_MPLS_VPN])    {      vty_out (vty, "%% No such neighbor or address family%s", VTY_NEWLINE);      return CMD_WARNING;    }  return bgp_show_mpls_vpn (vty, NULL, bgp_show_type_neighbor, su, 0);}DEFUN (show_ip_bgp_vpnv4_rd_neighbor_routes,       show_ip_bgp_vpnv4_rd_neighbor_routes_cmd,       "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D routes",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information for a route distinguisher\n"       "VPN Route Distinguisher\n"       "Detailed information on TCP and BGP neighbor connections\n"       "Neighbor to display information about\n"       "Display routes learned from neighbor\n"){  int ret;  union sockunion *su;  struct peer *peer;  struct prefix_rd prd;  ret = str2prefix_rd (argv[0], &prd);  if (! ret)    {      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);      return CMD_WARNING;    }  su = sockunion_str2su (argv[1]);  if (su == NULL)    {      vty_out (vty, "Malformed address: %s%s", argv[0], VTY_NEWLINE);               return CMD_WARNING;    }  peer = peer_lookup (NULL, su);  if (! peer || ! peer->afc[AFI_IP][SAFI_MPLS_VPN])    {      vty_out (vty, "%% No such neighbor or address family%s", VTY_NEWLINE);      return CMD_WARNING;    }  return bgp_show_mpls_vpn (vty, &prd, bgp_show_type_neighbor, su, 0);}DEFUN (show_ip_bgp_vpnv4_all_neighbor_advertised_routes,       show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd,       "show ip bgp vpnv4 all neighbors A.B.C.D advertised-routes",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information about all VPNv4 NLRIs\n"       "Detailed information on TCP and BGP neighbor connections\n"       "Neighbor to display information about\n"       "Display the routes advertised to a BGP neighbor\n"){  int ret;  struct peer *peer;  union sockunion su;  ret = str2sockunion (argv[0], &su);  if (ret < 0)    {      vty_out (vty, "%% Malformed address: %s%s", argv[0], VTY_NEWLINE);      return CMD_WARNING;    }  peer = peer_lookup (NULL, &su);  if (! peer || ! peer->afc[AFI_IP][SAFI_MPLS_VPN])    {      vty_out (vty, "%% No such neighbor or address family%s", VTY_NEWLINE);      return CMD_WARNING;    }  return show_adj_route_vpn (vty, peer, NULL);}DEFUN (show_ip_bgp_vpnv4_rd_neighbor_advertised_routes,       show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd,       "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D advertised-routes",       SHOW_STR       IP_STR       BGP_STR       "Display VPNv4 NLRI specific information\n"       "Display information for a route distinguisher\n"       "VPN Route Distinguisher\n"       "Detailed information on TCP and BGP neighbor connections\n"       "Neighbor to display information about\n"       "Display the routes advertised to a BGP neighbor\n"){  int ret;  struct peer *peer;  struct prefix_rd prd;  union sockunion su;  ret = str2sockunion (argv[1], &su);  if (ret < 0)    {      vty_out (vty, "%% Malformed address: %s%s", argv[0], VTY_NEWLINE);      return CMD_WARNING;    }  peer = peer_lookup (NULL, &su);  if (! peer || ! peer->afc[AFI_IP][SAFI_MPLS_VPN])    {      vty_out (vty, "%% No such neighbor or address family%s", VTY_NEWLINE);      return CMD_WARNING;    }  ret = str2prefix_rd (argv[0], &prd);  if (! ret)    {      vty_out (vty, "%% Malformed Route Distinguisher%s", VTY_NEWLINE);      return CMD_WARNING;    }  return show_adj_route_vpn (vty, peer, &prd);}voidbgp_mplsvpn_init (){  install_element (BGP_VPNV4_NODE, &vpnv4_network_cmd);  install_element (BGP_VPNV4_NODE, &no_vpnv4_network_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_tags_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_tags_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbor_routes_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbor_routes_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd);  install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_tags_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_tags_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbor_routes_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbor_routes_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd);  install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -