VMware Cloud Community
uswbnc53
Enthusiast
Enthusiast
Jump to solution

vSphere Distributed Switch 5.5 Traffic Filtering And Marking

Has anyone had luck creating a script to update the traffic filtering and marking area of a port group on a 5.5 vSphere Distributed Switch? The settings are only exposed in the web client so Onyx isn't an option.

I need to create a rule with the below values.

Traffic Filterig and Marking:

     Set Status to Enabled

     New Network Traffic Rule

       Name: Traffic Rule Name

       Action: Tag

       CoS Value: Update CoS tag value: 4

       Traffic Qualifiers:

            Traffic Direction: Egress

            New System Traffic Qualifier: vMotion

This is about as far as I can get.

$VDSPortGroup = Get-VDSwitch Test-dvSwitch | Get-VDPortGroup Test-PG

$Spec = New-Object VMware.Vim.DVPortgroupConfigSpec

$Spec.configVersion = $VDSPortGroup.ExtensionData.Config.ConfigVersion

$Spec.defaultPortConfig = New-Object VMware.Vim.VMwareDVSPortSetting

$Spec.defaultPortConfig.FilterPolicy = New-Object VMware.Vim.DvsFilterPolicy

0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Sorry, it took a bit longer than expected.

Try like this

$dvSwName = 'dvSw1'

$dvPgNames = 'dvPg1'

$dvSw = Get-VDSwitch -Name $dvSwName

# Enable LBT

foreach($pg in (Get-View -Id  $dvSw.ExtensionData.Portgroup | Where {$dvPgNames -contains $_.Name})){

    $spec = New-Object VMware.Vim.DVPortgroupConfigSpec

    $spec.ConfigVersion = $pg.Config.ConfigVersion

    $spec.DefaultPortConfig = New-Object VMware.Vim.VMwareDVSPortSetting

    $spec.DefaultPortConfig.FilterPolicy = New-Object VMware.Vim.DvsFilterPolicy

    $filter = New-Object VMware.Vim.DvsTrafficFilterConfig

    $filter.AgentName = 'dvfilter-generic-vmware'

    $ruleSet = New-Object VMware.Vim.DvsTrafficRuleset

    $ruleSet.Enabled = $true

    $rule =New-Object VMware.Vim.DvsTrafficRule

    $rule.Description = 'Traffic Rule Name'

    $rule.Direction = 'outgoingPackets'

    $action = New-Object VMware.Vim.DvsUpdateTagNetworkRuleAction

    $action.QosTag = 4

   

    $rule.Action += $action

   

    $ruleSet.Rules += $rule

   

    $filter.TrafficRuleSet += $ruleSet

    $spec.DefaultPortConfig.FilterPolicy.FilterConfig += $filter

    $pg.ReconfigureDVPortgroup($spec)

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

0 Kudos
4 Replies
uswbnc53
Enthusiast
Enthusiast
Jump to solution

Got a little further.

I'm able to add the DvsTrafficFilterConfig object into the spec, but not able to add the DvsTrafficRuleset object where the values are stored.

$VDSPortGroup = Get-VDSwitch Test-dvSwitch | Get-VDPortGroup Test-PG

$Spec = New-Object VMware.Vim.DVPortgroupConfigSpec

$Spec.ConfigVersion = $VDSPortGroup.ExtensionData.Config.ConfigVersion

$Spec.DefaultPortConfig = New-Object VMware.Vim.VMwareDVSPortSetting

$Spec.DefaultPortConfig.FilterPolicy = New-Object VMware.Vim.DvsFilterPolicy

$Spec.DefaultPortConfig.FilterPolicy.FilterConfig = New-Object VMware.Vim.DvsTrafficFilterConfig

$Spec.DefaultPortConfig.FilterPolicy.FilterConfig.TrafficRuleset = New-Object VMware.Vim.DvsTrafficRuleset

*****Error*****

Property 'TrafficRuleset' cannot be found on this object; make sure it exists and is settable.

At line:1 char:74

+ $Spec.DefaultPortConfig.FilterPolicy.FilterConfig.DvsTrafficFilterConfig. <<<< TrafficRuleset = New-Object VMware.Vim.DvsTrafficRuleset

    + CategoryInfo          : InvalidOperation: (TrafficRuleset:String) [], RuntimeException

    + FullyQualifiedErrorId : PropertyNotFound

*************

I was also able to map put where the values are stored.

FilterPolicy            : VMware.Vim.DvsFilterPolicy

  FilterConfig    Property   VMware.Vim.DvsFilterConfig[] FilterConfig {get;set;}

  TrafficRuleset  Property   VMware.Vim.DvsTrafficRuleset TrafficRuleset {get;set;}

  Enabled         Property   System.Nullable`1[[System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] Enabled {get;set;} #True

  Rules           Property   VMware.Vim.DvsTrafficRule[] Rules {get;set;}

  Description     Property   System.String Description {get;set;} #Network Traffic Rule 1

  Direction       Property   System.String Direction {get;set;} #outgoingPackets

  Qualifier       Property   VMware.Vim.DvsNetworkRuleQualifier[] Qualifier {get;set;}

  TypeOfSystemTraffic Property   VMware.Vim.StringExpression TypeOfSystemTraffic {get;set;}

  Value           Property   System.String Value {get;set;} #vmotion

  Action          Property   VMware.Vim.DvsNetworkRuleAction Action {get;set;}

  QosTag          Property   System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] QosTag {get;set;} #4

0 Kudos
uswbnc53
Enthusiast
Enthusiast
Jump to solution

I'm still stuck on this one.

$VDSPortGroup = Get-VDSwitch Test-dvSwitch | Get-VDPortGroup Test-PG

$Spec = New-Object VMware.Vim.DVPortgroupConfigSpec

$Spec.ConfigVersion = $VDSPortGroup.ExtensionData.Config.ConfigVersion

$Spec.DefaultPortConfig = New-Object VMware.Vim.VMwareDVSPortSetting

$Spec.DefaultPortConfig.FilterPolicy = New-Object VMware.Vim.DvsFilterPolicy

$Spec.DefaultPortConfig.FilterPolicy.FilterConfig = New-Object VMware.Vim.DvsTrafficFilterConfig

Everything works until this point. If you run $Spec.DefaultPortConfig.FilterPolicy.FilterConfig | gm you are able to see that TrafficRuleSet is part of it. However, when attempting to add the below line it errors.

$Spec.DefaultPortConfig.FilterPolicy.FilterConfig.TrafficRuleset = New-Object VMware.Vim.DvsTrafficRuleset

Property 'TrafficRuleset' cannot be found on this object; make sure it exists and is settable.

At line:1 char:51

+ $Spec.DefaultPortConfig.FilterPolicy.FilterConfig. <<<< TrafficRuleset = New-Object VMware.Vim.DvsTrafficRuleset

    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

    + FullyQualifiedErrorId : PropertyAssignmentException

Maybe, I'm not even looking in the right place to update the Traffic Filtering and Marking? I'm not sure at this point, but any help is greatly appreciated.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Sorry, it took a bit longer than expected.

Try like this

$dvSwName = 'dvSw1'

$dvPgNames = 'dvPg1'

$dvSw = Get-VDSwitch -Name $dvSwName

# Enable LBT

foreach($pg in (Get-View -Id  $dvSw.ExtensionData.Portgroup | Where {$dvPgNames -contains $_.Name})){

    $spec = New-Object VMware.Vim.DVPortgroupConfigSpec

    $spec.ConfigVersion = $pg.Config.ConfigVersion

    $spec.DefaultPortConfig = New-Object VMware.Vim.VMwareDVSPortSetting

    $spec.DefaultPortConfig.FilterPolicy = New-Object VMware.Vim.DvsFilterPolicy

    $filter = New-Object VMware.Vim.DvsTrafficFilterConfig

    $filter.AgentName = 'dvfilter-generic-vmware'

    $ruleSet = New-Object VMware.Vim.DvsTrafficRuleset

    $ruleSet.Enabled = $true

    $rule =New-Object VMware.Vim.DvsTrafficRule

    $rule.Description = 'Traffic Rule Name'

    $rule.Direction = 'outgoingPackets'

    $action = New-Object VMware.Vim.DvsUpdateTagNetworkRuleAction

    $action.QosTag = 4

   

    $rule.Action += $action

   

    $ruleSet.Rules += $rule

   

    $filter.TrafficRuleSet += $ruleSet

    $spec.DefaultPortConfig.FilterPolicy.FilterConfig += $filter

    $pg.ReconfigureDVPortgroup($spec)

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
uswbnc53
Enthusiast
Enthusiast
Jump to solution

Thanks Luc! This worked great. I really appreciate the help!

0 Kudos