07-17-2013 09:49 AM
Hi, I've got an issue when trying to set QoS nested policies as follows. The Topology is:
(Carrier MPLS Network)<----- WAN----> (Cisco 2921 Router)<--- LAN_Core_Switch --------> (LAN_Segment_A)
|
|------> (LAN_Segment_B)
|
|------> (LAN_Segment_C)
At the WAN channel we have a bandwidth of 27 Mbps; What we need is to split the available BW in such a way that BW_A+BW_B+BW_C = 27 Mbps. We have define a policy that globally manages custom classes (VoIP, Videoconference, SAP, etc). We nested that policy inside a child policy where we put a class for every LAN_Segment and a shape average command as follows:
!
! Definition of Classes for INPUT traffic (pre-marking)
!
class-map match-any VIDEO_IN
description VIDEO_IN
match access-group 111
match dscp cs4
class-map match-any SAP_IN
description SAP_IN
match access-group 110
match access-group 109
class-map match-any COLAB_IN
description Collaboration_IN
match access-group 113
!
class-map match-any VoIP_IN
description VoIP_IN
match access-group 108
match protocol rtp audio
match ip precedence 5
match protocol h323
match protocol sip
!
!! Classes for output traffic
!
class-map match-any VoIP_OUT
description VoIP OUT
match dscp ef
class-map match-any VIDEO_OUT
description VIDEO_OUT
match dscp af41
class-map match-any COLAB_OUT
description Email/Intranet OUT
match dscp af11
class-map match-any SAP_OUT
description Strategic/Business Apps OUT
match dscp af21
!
!!! This classes identify the different LAN Segments
!
class-map match-any LAN_Segment_A
match access-group name C_N_List
!
class-map match-any LAN_Segment_B
match access-group name A_C_List
!
class-map match-any LAN_Segment_C
match access-group name N_V_List
!
!! INPUT policy that identifies and marks interesting traffic
!
policy-map INPUT
class VoIP_IN
set ip dscp ef
class VIDEO_IN
set ip dscp af41
class SAP_IN
set ip dscp af21
class COLAB_IN
set ip dscp af11
class class-default
set ip dscp default
!!! This is the bottom policy
!
policy-map CE-OUT
class VoIP_OUT
priority percent 15
police cir percent 15
conform-action set-dscp-transmit ef
exceed-action drop
violate-action drop
class VIDEO_OUT
priority percent 20
police cir percent 20
conform-action set-dscp-transmit af41
exceed-action set-dscp-transmit af42
violate-action set-dscp-transmit af43
class COLAB_OUT
bandwidth percent 20
random-detect dscp-based
police cir percent 20
conform-action set-dscp-transmit af11
exceed-action set-dscp-transmit af12
violate-action set-dscp-transmit af13
class SAP_OUT
bandwidth percent 35
random-detect dscp-based
police cir percent 35
conform-action set-dscp-transmit af21
exceed-action set-dscp-transmit af22
violate-action set-dscp-transmit af23
class class-default
bandwidth percent 10
random-detect
!
!
!! This is where the nesting begins
!
!
policy-map WAN_EGRESS_CHILD
!
class LAN_Segment_A
shape average 10000000
service-policy CE-OUT
!
class LAN_Segment_B
shape average 12000000
service-policy CE-OUT
!
class LAN_Segment_C
shape average 5000000
service-policy CE-OUT
!!
policy-map WAN_EGRESS_PARENT
class class-default
shape average 27000000
service-policy WAN_EGRESS_CHILD
!!
!
When we apply this policy in a tunnel interface, all we can see is the matching in the default-class of every child class and no match in the other classes. The tunnel config is:
!
interface Tunnel200
bandwidth 27000
ip address x.y.z.w a.c.b.d
ip mtu 1500
ip flow ingress
ip flow egress
load-interval 30
qos pre-classify
tunnel source GigabitEthernet0/0
tunnel destination x.y.c.z
service-policy output WAN_EGRESS_PARENT
!
The output of the policy is:
Branch_Router#show policy-map interface tunnel 200
Tunnel200
Service-policy output: WAN_EGRESS_PARENT
Class-map: class-default (match-any)
274898 packets, 142350260 bytes
30 second offered rate 13583000 bps, drop rate 75000 bps
Match: any
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 22/1407/0
(pkts output/bytes output) 295792/146363134
shape (average) cir 27000000, bc 108000, be 108000
target shape rate 27000000
Service-policy : WAN_EGRESS_CHILD
Class-map: LAN_Segment_A (match-any)
146718 packets, 73139479 bytes
30 second offered rate 7176000 bps, drop rate 74000 bps
Match: access-group name C_N_List
146718 packets, 73139479 bytes
30 second rate 7176000 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 22/1380/0
(pkts output/bytes output) 149485/74642303
shape (average) cir 10000000, bc 40000, be 40000
target shape rate 10000000
Service-policy : CE-OUT
queue stats for all priority classes:
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
Class-map: VoIP_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp ef (46)
0 packets, 0 bytes
30 second rate 0 bps
Priority: 15% (1012 kbps), burst bytes 25300, b/w exceed drops: 0
police:
cir 15 %
cir 1500000 bps, bc 46875 bytes, be 46875 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit ef
exceeded 0 packets, 0 bytes; actions:
drop
violated 0 packets, 0 bytes; actions:
drop
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: VIDEO_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af41 (34)
0 packets, 0 bytes
30 second rate 0 bps
Priority: 20% (1350 kbps), burst bytes 33750, b/w exceed drops: 0
police:
cir 20 %
cir 2000000 bps, bc 62500 bytes, be 62500 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af41
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af42
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af43
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: COLAB_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af11 (10)
0 packets, 0 bytes
30 second rate 0 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth 20% (1350 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
police:
cir 20 %
cir 2000000 bps, bc 62500 bytes, be 62500 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af11
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af12
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af13
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: SAP_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af21 (18)
0 packets, 0 bytes
30 second rate 0 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth 35% (2362 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
police:
cir 35 %
cir 3500000 bps, bc 109375 bytes, be 109375 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af21
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af22
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af23
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: class-default (match-any)
146716 packets, 73138279 bytes
30 second offered rate 7176000 bps, drop rate 74000 bps
Match: any
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 21/1380/0
(pkts output/bytes output) 149493/74647215
bandwidth 10% (675 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 16 packets
class Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
0 149492/74647117 1380/694814 0/0 20 40 1/10
1 0/0 0/0 0/0 22 40 1/10
2 0/0 0/0 0/0 24 40 1/10
3 0/0 0/0 0/0 26 40 1/10
4 0/0 0/0 0/0 28 40 1/10
5 0/0 0/0 0/0 30 40 1/10
6 0/0 0/0 0/0 32 40 1/10
7 0/0 0/0 0/0 34 40 1/10
Class-map: LAN_Segment_B (match-any)
71407 packets, 34041681 bytes
30 second offered rate 3136000 bps, drop rate 0 bps
Match: access-group name N_V_List
71407 packets, 34041681 bytes
30 second rate 3136000 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 79976/35332965
shape (average) cir 12000000, bc 48000, be 48000
target shape rate 12000000
Service-policy : CE-OUT
queue stats for all priority classes:
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
Class-map: VoIP_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp ef (46)
0 packets, 0 bytes
30 second rate 0 bps
Priority: 15% (1012 kbps), burst bytes 25300, b/w exceed drops: 0
police:
cir 15 %
cir 1800000 bps, bc 56250 bytes, be 56250 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit ef
exceeded 0 packets, 0 bytes; actions:
drop
violated 0 packets, 0 bytes; actions:
drop
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: VIDEO_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af41 (34)
0 packets, 0 bytes
30 second rate 0 bps
Priority: 20% (1350 kbps), burst bytes 33750, b/w exceed drops: 0
police:
cir 20 %
cir 2400000 bps, bc 75000 bytes, be 75000 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af41
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af42
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af43
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: COLAB_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af11 (10)
0 packets, 0 bytes
30 second rate 0 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth 20% (1350 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
police:
cir 20 %
cir 2400000 bps, bc 75000 bytes, be 75000 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af11
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af12
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af13
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: SAP_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af21 (18)
0 packets, 0 bytes
30 second rate 0 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth 35% (2362 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
police:
cir 35 %
cir 4200000 bps, bc 131250 bytes, be 131250 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af21
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af22
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af23
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: class-default (match-any)
71405 packets, 34041553 bytes
30 second offered rate 3136000 bps, drop rate 0 bps
Match: any
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 79976/35332965
bandwidth 10% (675 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
class Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
0 79973/35332695 0/0 0/0 20 40 1/10
1 0/0 0/0 0/0 22 40 1/10
2 0/0 0/0 0/0 24 40 1/10
3 0/0 0/0 0/0 26 40 1/10
4 0/0 0/0 0/0 28 40 1/10
5 0/0 0/0 0/0 30 40 1/10
6 1/114 0/0 0/0 32 40 1/10
7 0/0 0/0 0/0 34 40 1/10
Class-map: LAN_Segment_C (match-any)
51520 packets, 29021558 bytes
30 second offered rate 2682000 bps, drop rate 0 bps
Match: access-group name A_C_List
51520 packets, 29021558 bytes
30 second rate 2682000 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/27/0
(pkts output/bytes output) 57146/29919316
shape (average) cir 5000000, bc 20000, be 20000
target shape rate 5000000
Service-policy : CE-OUT
queue stats for all priority classes:
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
Class-map: VoIP_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp ef (46)
0 packets, 0 bytes
30 second rate 0 bps
Priority: 15% (750 kbps), burst bytes 18750, b/w exceed drops: 0
police:
cir 15 %
cir 750000 bps, bc 23437 bytes, be 23437 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit ef
exceeded 0 packets, 0 bytes; actions:
drop
violated 0 packets, 0 bytes; actions:
drop
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: VIDEO_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af41 (34)
0 packets, 0 bytes
30 second rate 0 bps
Priority: 20% (1000 kbps), burst bytes 25000, b/w exceed drops: 0
police:
cir 20 %
cir 1000000 bps, bc 31250 bytes, be 31250 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af41
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af42
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af43
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: COLAB_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af11 (10)
0 packets, 0 bytes
30 second rate 0 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth 20% (1000 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
police:
cir 20 %
cir 1000000 bps, bc 31250 bytes, be 31250 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af11
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af12
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af13
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: SAP_OUT (match-any)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: dscp af21 (18)
0 packets, 0 bytes
30 second rate 0 bps
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
bandwidth 35% (1750 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 0 packets
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
police:
cir 35 %
cir 1750000 bps, bc 54687 bytes, be 54687 bytes
conformed 0 packets, 0 bytes; actions:
set-dscp-transmit af21
exceeded 0 packets, 0 bytes; actions:
set-dscp-transmit af22
violated 0 packets, 0 bytes; actions:
set-dscp-transmit af23
conformed 0 bps, exceed 0 bps, violate 0 bps
Class-map: class-default (match-any)
51519 packets, 29021494 bytes
30 second offered rate 2682000 bps, drop rate 0 bps
Match: any
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/27/0
(pkts output/bytes output) 57147/29920360
bandwidth 10% (500 kbps)
Exp-weight-constant: 9 (1/512)
Mean queue depth: 4 packets
class Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thresh prob
0 57146/29920282 27/16550 0/0 20 40 1/10
1 0/0 0/0 0/0 22 40 1/10
2 0/0 0/0 0/0 24 40 1/10
3 0/0 0/0 0/0 26 40 1/10
4 0/0 0/0 0/0 28 40 1/10
5 0/0 0/0 0/0 30 40 1/10
6 0/0 0/0 0/0 32 40 1/10
7 0/0 0/0 0/0 34 40 1/10
Class-map: class-default (match-any)
5237 packets, 6137730 bytes
30 second offered rate 602000 bps, drop rate 0 bps
Match: any
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 9188/6469478
Branch_Router#
All access-list have matches:
!
Branch_Router#show access-list
Extended IP access list 108
10 permit udp any any eq 4569 (48807 matches)
20 permit udp any any range 16384 32767 (3550225 matches)
30 permit udp any range 16384 32767 any (84029 matches)
40 permit tcp any eq 1720 any (47236 matches)
50 permit tcp any any eq 1720 (517716 matches)
60 permit tcp any any eq telnet (13680 matches)
70 permit udp any any eq 5060
80 permit tcp any any eq 5060
90 permit udp any any eq 5004
100 permit udp any any eq 5005
Extended IP access list 109
10 permit tcp any range 3200 3299 any (200574 matches)
20 permit tcp any range 3300 3399 any (1905930 matches)
30 permit tcp any range 3400 3499 any (251207 matches)
40 permit tcp any range 3600 3699 any (369026 matches)
50 permit tcp any range 4700 4799 any (677860 matches)
60 permit tcp any range 4800 4899 any (198782 matches)
70 permit tcp any range 8000 8017 any (8 matches)
80 permit tcp any range 8110 8117 any
90 permit tcp any range 50000 59999 any (37289239 matches)
100 permit tcp any any range 3200 3299 (181476 matches)
110 permit tcp any any range 3300 3399 (165686 matches)
120 permit tcp any any range 3400 3499 (50461 matches)
130 permit tcp any any range 3600 3699 (50866 matches)
140 permit tcp any any range 4700 4799 (225921 matches)
150 permit tcp any any range 4800 4899 (46588 matches)
160 permit tcp any any range 8000 8017 (42678 matches)
170 permit tcp any any range 8110 8117 (20 matches)
180 permit tcp any any range 50000 59999 (24460349 matches)
190 permit tcp any any eq 2100 (515 matches)
200 permit tcp any eq 2100 any (1762 matches)
Extended IP access list 110
10 permit tcp 10.204.1.0 0.0.0.255 any
20 permit ip 10.79.0.0 0.0.255.255 any
30 permit tcp any 10.204.1.0 0.0.0.255 (1509478 matches)
40 permit ip any 10.99.0.0 0.0.255.255 (44721 matches)
50 permit tcp 10.204.3.0 0.0.0.255 any
60 permit tcp any 10.204.3.0 0.0.0.255 (2119004 matches)
70 permit ip 10.204.3.0 0.0.0.255 any
80 permit ip any 10.204.3.0 0.0.0.255 (12451 matches)
Extended IP access list 111
10 permit tcp 172.230.0.0 0.0.0.7 any
Extended IP access list 113
10 permit ip any 10.204.5.0 0.0.0.255 (1183081 matches)
20 permit tcp any any eq 1433 (520584 matches)
30 permit udp any any eq domain (2452103 matches)
40 permit tcp any any eq domain (18310 matches)
50 permit udp any any eq 389 (15433 matches)
60 permit tcp any any eq 389 (1222 matches)
70 permit udp any any eq snmp (1979212 matches)
80 permit udp any any eq snmptrap (5352 matches)
90 permit ip 10.204.5.0 0.0.0.255 any
100 permit tcp any eq 1433 any (115378 matches)
110 permit udp any eq domain any (593532 matches)
120 permit udp any eq 389 any (79337 matches)
130 permit tcp any eq 389 any (229953 matches)
140 permit udp any eq snmp any (734680 matches)
150 permit udp any eq snmptrap any
Extended IP access list A_C_List
10 permit ip 10.206.4.0 0.0.3.255 any (417302 matches)
20 permit ip 10.206.44.0 0.0.3.255 any (80552 matches)
30 permit ip 10.206.72.0 0.0.3.255 any (3415 matches)
40 permit ip 10.206.76.0 0.0.3.255 any (97447 matches)
50 permit ip 10.206.28.0 0.0.3.255 any (244783 matches)
Extended IP access list C_N_List
10 permit ip 10.206.0.0 0.0.3.255 any (141585 matches)
20 permit ip 10.206.8.0 0.0.3.255 any (707476 matches)
30 permit ip 10.206.16.0 0.0.3.255 any (405116 matches)
40 permit ip 10.206.32.0 0.0.3.255 any (104512 matches)
50 permit ip 10.206.36.0 0.0.3.255 any (3412 matches)
60 permit ip 10.206.60.0 0.0.3.255 any (35314 matches)
70 permit ip 10.206.80.0 0.0.3.255 any
Extended IP access list N_V_List
10 permit ip 10.206.252.0 0.0.3.255 any (36431 matches)
20 permit ip 10.206.12.0 0.0.3.255 any (548485 matches)
30 permit ip 10.206.16.0 0.0.3.255 any
40 permit ip 10.206.48.0 0.0.3.255 any (660214 matches)
50 permit ip 10.206.52.0 0.0.3.255 any (798506 matches)
60 permit ip 10.206.56.0 0.0.3.255 any
70 permit ip 10.206.68.0 0.0.3.255 any (14782 matches)
!
We've thought in order to find a work-around just to put policer's at the class level without nesting the CE-OUT policy at the Customer Router by doing so, we hope that every LAN_Segment has its correct BW and at the Provider Edge router we'll apply the CE-OUT policy to give a global shaping for the bulk of services that pass through this link (VoIP, Videoconference, SAP, etc.)
I am not good at this topic so I'd really appreciate if someone can point me in the right direction.
Thanks in advance.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide