cancel
Showing results for 
Search instead for 
Did you mean: 
Login & Join the DevCentral Connects Group to watch the Recorded LiveStream (May 12) on Basic iControl Security - show notes included.

Problem this snippet solves:

This Powershell application prints out the static TMM and Management routing table from the BIG-IP.

Usage: .\GetBigipRoutes.ps1 bigip username pass

How to use this snippet:

Script

getBigipRoutes.ps1

Code :

#----------------------------------------------------------------------------
# The contents of this file are subject to the "END USER LICENSE AGREEMENT FOR F5
# Software Development Kit for iControl"; you may not use this file except in
# compliance with the License. The License is included in the iControl
# Software Development Kit.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# The Original Code is iControl Code and related documentation
# distributed by F5.
#
# The Initial Developer of the Original Code is F5 Networks,
# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2009 F5 Networks,
# Inc. All Rights Reserved.  iControl (TM) is a registered trademark of F5 Networks, Inc.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License (the "GPL"), in which case the
# provisions of GPL are applicable instead of those above.  If you wish
# to allow use of your version of this file only under the terms of the
# GPL and not to allow others to use your version of this file under the
# License, indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by the GPL.
# If you do not delete the provisions above, a recipient may use your
# version of this file under either the License or the GPL.
#----------------------------------------------------------------------------
param (
  $bigip = $null,
  $user = $null,
  $pass = $null
);

Set-PSDebug -strict;

#-------------------------------------------------------------------------
# function New-RouteObject
#-------------------------------------------------------------------------
function New-RouteObject()
{
  param([string]$destination, [string]$netmask, [string]$gateway);
  $o = 1 | select destination, netmask, gateway;
  $o.destination = $destination;
  $o.netmask = $netmask;
  $o.gateway = $gateway;
  $o;
}

#-------------------------------------------------------------------------
# function Sort-RouteObjectList
#-------------------------------------------------------------------------
function Sort-RouteObjectList()
{
  param($list = $null);
  if ( $list )
  {
    $list | sort-object { "{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f @([int[]]$_.destination.split('.')) }
  }
}

#-------------------------------------------------------------------------
# function Get-TMMRoutes
#-------------------------------------------------------------------------
function Get-TMMRoutes()
{
  $RouteDefinitionA = (Get-F5.iControl).NetworkingRouteTable.get_static_route();
  $RouteTypeEntryA = (Get-F5.iControl).NetworkingRouteTable.get_static_route_type($RouteDefinitionA);
  $RouteGatewaysA = (Get-F5.iControl).NetworkingRouteTable.get_static_route_gateway($RouteDefinitionA);
  $RoutePoolsA = (Get-F5.iControl).NetworkingRouteTable.get_static_route_pool($RouteDefinitionA);
  $RouteVLANsA = (Get-F5.iControl).NetworkingRouteTable.get_static_route_vlan($RouteDefinitionA);
  
  $ldict_gw_ip = @();
  $ldict_gw_pool = @();
  $ldict_gw_vlan = @();
  $ldict_gw_reject = @();
  
  for($i=0; $i -lt $RouteDefinitionA.Length; $i++)
  {
    $RouteDef = $RouteDefinitionA[$i];
    switch ($RouteTypeEntryA[$i])
    {
      "ROUTE_TYPE_GATEWAY" {
        $ldict_gw_ip += (New-RouteObject -destination $RouteDef.destination -netmask $RouteDef.netmask -gateway $RouteGatewaysA[$i]); 
      }
      "ROUTE_TYPE_POOL" {
        $ldict_gw_pool += (New-RouteObject -destination $RouteDef.destination -netmask $RouteDef.netmask -gateway $RoutePoolsA[$i]); 
      }
      "ROUTE_TYPE_INTERFACE" {
        $ldict_gw_vlan += (New-RouteObject -destination $RouteDef.destination -netmask $RouteDef.netmask -gateway $RouteVLANsA[$i]); 
      }
      "ROUTE_TYPE_REJECT" {
        $ldict_gw_reject += $RouteDef; 
      }
    }
  }
  
  Write-Host "TMM IP Routes: (net mask ip)"
  Sort-RouteObjectList -list $ldict_gw_ip; 
  
  Write-Host "TMM Pool Routes: (net mask pool)"
  Sort-RouteObjectList -list $ldict_gw_pool;

  Write-Host "TMM VLAN Routes: (net mask vlan)"
  Sort-RouteObjectList -list $ldict_gw_vlan;

  Write-Host "TMM Rejected Routes: (net mask)"
  Sort-RouteObjectList -list $ldict_gw_reject;
}

#-------------------------------------------------------------------------
# function Get-MgmtRoutes
#-------------------------------------------------------------------------
function Get-MgmtRoutes()
{
  $RouteDefinitionA = $(Get-F5.iControl).NetworkingRouteTable.get_management_route();
  $RouteGatewaysA = $(Get-F5.iControl).NetworkingRouteTable.get_management_route_gateway($RouteDefinitionA);
  
  $ldict_gw_mgmt = @();
  for($i=0; $i -lt $RouteDefinitionA.Length; $i++)
  {
    $RouteDef = $RouteDefinitionA[$i];
    $ldict_gw_mgmt += (New-RouteObject -destination $RouteDef.destination -netmask $RouteDef.netmask -gateway $RouteGatewaysA[$i]);
  }
  
  Write-Host "Management Routes: (net, mask, ip)";
  Sort-RouteObjectList -list $ldict_gw_mgmt;
}

#-------------------------------------------------------------------------
# Do-Initialize
#-------------------------------------------------------------------------
function Do-Initialize()
{
  if ( (Get-PSSnapin | Where-Object { $_.Name -eq "iControlSnapIn"}) -eq $null )
  {
    Add-PSSnapIn iControlSnapIn
  }
  $success = Initialize-F5.iControl -HostName $bigip -Username $user -Password $pass;
  
  return $success;
}

#-------------------------------------------------------------------------
# Main Application Logic
#-------------------------------------------------------------------------
if ( ($bigip -eq $null) -or ($user -eq $null) -or ($pass -eq $null) )
{
  Write-Usage;
}

if ( Do-Initialize )
{
  Get-TMMRoutes;
  Get-MgmtRoutes;
}
else
{
  Write-Error "ERROR: iControl subsystem not initialized"
}
Version history
Last update:
‎09-Mar-2015 11:53
Updated by:
Contributors