04-09-2013 02:19 PM - edited 03-16-2019 04:42 PM
Hi all
Callflow: Phone - CUCM - SIP - CUBE - SIP provider
The provider requires that the INVITE is shown like this:
From: "CLID-NUMBER" <sip:ACCOUNTNUMBER@sip.surevoip.co.uk>;tag=1F0BF13C-1839
in order to display correct CLID on the remote phone.
Normal it displays like:
From: "Name" <sip:CLID-NUMBER@sip.surevoip.co.uk>;tag=8da186ef-e88b-463a-bd27-31bc21886086-24996475
I have tried to see if I could use a sip-profile to move the CLID number to Name field and replace the CLID number with account number. The last bit works perfect, but I cannot get the CLID number into the Name.
If I change the Display name on the CUCM, the call works with the correct CLID.
Any idea to how I can fix this?
Solved! Go to Solution.
04-14-2013 08:14 AM
I'm with aokaniawon here: this is a bad idea and definitely does not comply with the RFC. You cand try this but I'm not sure it will work; CUBE may fail the call as a consiquence of manipulating the From header like this.
voice class sip-profiles 10
request INVITE sip-header From modify "From:(.*)<>>
! Where 123456789 is your account number.
dial-peer voice 10 voip
! Provider-facing outgoing dial-peer
voice-class sip profiles 10
Please remember to rate helpful responses and identify helpful or correct answers.
04-16-2013 04:40 AM
OK..Martin, please add this new dial-peer..Calls coming from CUCM will match this dial-peer and sip signalling will be done on the gig0/0 for traffic between cube and cucm..not on gig0/1 as you have it configured..
dial-peer voice 1 voip
rtp payload-type cisco-codec-fax-ind 98
no modem passthrough
session protocol sipv2
incoming called-number.
voice-class codec 1
no voice-class sip outbound-proxy
voice-class sip bind control source-interface GigabitEthernet0/0
voice-class sip bind media source-interface GigabitEthernet0/0
dtmf-relay rtp-nte
fax-relay sg3-to-g3
fax rate 14400
fax protocol t38 version 0 ls-redundancy 0 hs-redundancy 0 fallback none
!
Test again and send the logs..just debug voip ccapi inout and debug ccsip messages
Please rate all useful posts
"opportunity is a haughty goddess who waste no time with those who are unprepared"
04-09-2013 03:04 PM
Martin,
Technically I dont see how this will ever work. The filed is the "" is an optional display field as specified by the RFC3261..
For your provider to not show correct CLI because of this is beyond me..Most people do not use the From field for CLI..Its either Remote-Party-ID or PAI...
I honestly suggest you find another provider..As you have seen the display field is populated from the display field in CUCM..The only place to change it is there..
You cany match display name to numbers with SIP profiles..That cant work
Please rate all useful posts
"opportunity is a haughty goddess who waste no time with those who are unprepared"
04-14-2013 08:14 AM
I'm with aokaniawon here: this is a bad idea and definitely does not comply with the RFC. You cand try this but I'm not sure it will work; CUBE may fail the call as a consiquence of manipulating the From header like this.
voice class sip-profiles 10
request INVITE sip-header From modify "From:(.*)<>>
! Where 123456789 is your account number.
dial-peer voice 10 voip
! Provider-facing outgoing dial-peer
voice-class sip profiles 10
Please remember to rate helpful responses and identify helpful or correct answers.
04-16-2013 12:55 AM
Hi Jonathan and Aokanlawon
i have requested the provider to follow the RFC, but I did the sip-profile as Jonathan suggested and apperantly the translation works...
But the called party phone only rings once and in the debug I send the cancel request
Can any one see why I the call fails? all calls going out with the accountnumber works fine..
Sent:
INVITE sip:0045XXXX76@sip.XXXX.co.uk:5060 SIP/2.0
Via: SIP/2.0/UDP 89.XXX.XXX.42:5060;branch=z9hG4bK1DEE17AF
From: "01224XXXX" <>>XXXXXX924275@sip.XXXX.co.uk>;tag=40588C74-2407
To: <>>0045XXXX76@sip.XXXX.co.uk>
Date: Tue, 16 Apr 2013 07:41:37 GMT
Call-ID: E755D2F0-A59F11E2-84739E65-5705CFE7@89.XXX.XXX.42
Supported: timer,resource-priority,replaces,sdp-anat
Min-SE: 1800
Cisco-Guid: 3881081504-2778665442-2221776485-1459998695
User-Agent: Cisco-SIPGateway/IOS-15.2.4.M3
Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY, INFO, REGISTER
CSeq: 101 INVITE
Timestamp: 1366098097
Contact: <01224XXXX>
Expires: 180
Allow-Events: telephone-event
Max-Forwards: 69
Session-Expires: 1800
Content-Type: application/sdp
Content-Disposition: session;handling=required
Content-Length: 27401224XXXX>
v=0
o=CiscoSystemsSIP-GW-UserAgent 5259 6052 IN IP4 89.XXX.XXX.42
s=SIP Call
c=IN IP4 89.XXX.XXX.42
t=0 0
m=audio 26670 RTP/AVP 0 101 19
c=IN IP4 89.XXX.XXX.42
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=rtpmap:19 CN/8000
a=ptime:20
.Apr 16 07:41:37.528: //5466/E7549AA0846D/SIP/Msg/ccsipDisplayMsg:
Received:
SIP/2.0 100 Giving a try
Via: SIP/2.0/UDP 89.XXX.XXX.42:5060;branch=z9hG4bK1DEE17AF
From: "01224XXXX" <>>XXXXXX924275@sip.XXXX.co.uk>;tag=40588C74-2407
To: <>>0045XXXX76@sip.XXXX.co.uk>
Call-ID: E755D2F0-A59F11E2-84739E65-5705CFE7@89.XXX.XXX.42
CSeq: 101 INVITE
Server: XXXX.co.uk 1.5.3
Content-Length: 0
.Apr 16 07:41:41.960: //5466/E7549AA0846D/SIP/Msg/ccsipDisplayMsg:
Received:
SIP/2.0 183 Session Progress
Via: SIP/2.0/UDP 89.XXX.XXX.42:5060;branch=z9hG4bK1DEE17AF
Record-Route: <85.92.88.90>
From: "01224XXXX" <>>XXXXXX924275@sip.XXXX.co.uk>;tag=40588C74-2407
To: <>>0045XXXX76@sip.XXXX.co.uk>;tag=as2f2f55f4
Call-ID: E755D2F0-A59F11E2-84739E65-5705CFE7@89.XXX.XXX.42
CSeq: 101 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces
Contact: <0045XXXX76>
Content-Type: application/sdp
Content-Length: 2360045XXXX76>85.92.88.90>
v=0
o=root 6309 6309 IN IP4 85.92.88.91
s=session
c=IN IP4 85.92.88.91
t=0 0
m=audio 13290 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
.Apr 16 07:41:41.960: //5466/E7549AA0846D/CCAPI/cc_api_caps_ind:
Destination Interface=0x0, Destination Call Id=-1, Source Call Id=5466,
Caps(Codec=0x1, Fax Rate=0x2, Fax Version:=0, Vad=0x2,
Modem=0x0, Codec Bytes=160, Signal Type=2)
.Apr 16 07:41:41.960: //5466/E7549AA0846D/CCAPI/cc_api_caps_ind:
Caps(Playout Mode=1, Playout Initial=60(ms), Playout Min=40(ms),
Playout Max=1000(ms), Fax Nom=300(ms))
.Apr 16 07:41:41.960: //5465/E7549AA0846D/CCAPI/cc_api_caps_ack:
Destination Interface=0x0, Destination Call Id=-1, Source Call Id=5465,
Caps(Codec=g711ulaw(0x1), Fax Rate=FAX_RATE_14400(0x80), Fax Version:=0, Vad=ON(0x2),
Modem=OFF(0x0), Codec Bytes=160, Signal Type=2, Seq Num Start=1)
.Apr 16 07:41:41.960: //5465/E7549AA0846D/CCAPI/cc_api_caps_ack:
Destination Interface=0x0, Destination Call Id=-1, Source Call Id=5465,
Caps(Codec=g711ulaw(0x1), Fax Rate=FAX_RATE_14400(0x80), Fax Version:=0, Vad=ON(0x2),
Modem=OFF(0x0), Codec Bytes=160, Signal Type=2, Seq Num Start=1)
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_event_indication:
Event=178, Call Id=5466
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_event_indication:
Event Is Sent To Conferenced SPI(s) Directly
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_event_indication:
Event=98, Call Id=5466
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_event_indication:
Event Is Sent To Conferenced SPI(s) Directly
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_call_cut_progress:
Interface=0x3CEEBAA0, Progress Indication=INBAND(8), Signal Indication=SIGNAL RINGBACK(1),
Cause Value=0
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_call_cut_progress:
Call Entry(Responsed=TRUE)
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccCallCutProgress:
Progress Indication=INBAND(8), Signal Indication=SIGNAL RINGBACK(1), Cause Value=0
Voice Call Send Alert=FALSE, Call Entry(Alert Sent=FALSE)
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccCallCutProgress:
Call Entry(Responsed=TRUE)
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccConferenceCreate:
(confID=0xFFFFFFFF, callID1=0x1559, gcid=E7549AA0-A59F11E2-84709E65-5705CFE7, tag=0x0)
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/ccConferenceCreate:
(confID=0xFFFFFFFF, callID2=0x155A, gcid=E7549AA0-A59F11E2-84709E65-5705CFE7, tag=0x0)
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccConferenceCreate:
Conference Id=0xFFFFFFFF, Call Id1=5465, Call Id2=5466, Tag=0x0
.Apr 16 07:41:41.964: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:41.964: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:41.964: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:41.964: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccConferenceCreate:
.Apr 16 07:41:41.964: ccConferenceCreate: ret1=0, codecMask1=1, bytes1=160, negot1=1, dtmf1=6
ret2=0, codecMask2=1, bytes2=160, negot2=1, dtmf2=6,
tx_dynamic_pt1=0, rx_dynamic_pt1=0, codec_mode1=0, params_bitmap1 =0
tx_dynamic_pt2=0, rx_dynamic_pt2=0, codec_mode2=0, params_bitmap2 =0
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccGetMediaClassTag:
media class tag 0
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccSetMediaclassIp2ipTags:
media class tags set: NR 0, ASP 0
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/ccGetMediaClassTag:
media class tag 0
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/ccSetMediaclassIp2ipTags:
media class tags set: NR 0, ASP 0
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccGet_xc_nr_asp_info:
media class tags: NR 0, ASP 0
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/ccGet_xc_nr_asp_info:
media class tags: NR 0, ASP 0
.Apr 16 07:41:41.964: //5465/xxxxxxxxxxxx/CCAPI/ccConferenceCreate:
xcoder inserted for preferred features w/ mask 0x0
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccConferenceCreate:
delay media to slow start case, codec negotation is not done
.Apr 16 07:41:41.964: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:41.964: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:41.964: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:41.964: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/cc_api_bridge_done:
Conference Id=0x74A, Source Interface=0x3CEEBAA0, Source Call Id=5465,
Destination Call Id=5466, Disposition=0x0, Tag=0x0
.Apr 16 07:41:41.964: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:41.964: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:41.964: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:41.964: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/cc_api_bridge_done:
Conference Id=0x74A, Source Interface=0x3CEEBAA0, Source Call Id=5466,
Destination Call Id=5465, Disposition=0x0, Tag=0x0
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/cc_generic_bridge_done:
Conference Id=0x74A, Source Interface=0x3CEEBAA0, Source Call Id=5466,
Destination Call Id=5465, Disposition=0x0, Tag=0x0
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccConferenceCreate:
Call Entry(Conference Id=0x74A, Destination Call Id=5466)
.Apr 16 07:41:41.964: //5466/E7549AA0846D/CCAPI/ccConferenceCreate:
Call Entry(Conference Id=0x74A, Destination Call Id=5465)
.Apr 16 07:41:41.964: //5465/E7549AA0846D/CCAPI/ccConferenceCreate:
.Apr 16 07:41:41.964: confID:0x74A; callEntry1 callID1:0x1559, type:3; callEntry2 callID2:0x155A, type:3
.Apr 16 07:41:41.968: //5465/E7549AA0846D/CCAPI/cc_process_notify_bridge_done:
Conference Id=0x74A, Call Id1=5465, Call Id2=5466
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_api_call_disconnected:
Cause Value=38, Interface=0x3CEEBAA0, Call Id=5465
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_api_call_disconnected:
Call Entry(Responsed=TRUE, Cause Value=38, Retry Count=0)
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/ccConferenceDestroy:
Conference Id=0x74A, Tag=0x0
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/ccConferenceDestroy:
.Apr 16 07:41:42.404: confID:0x74A; callEntry1 callID1:0x1559, type:3; callEntry2 callID2:0x155A, type:3
.Apr 16 07:41:42.404: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_api_bridge_drop_done:
Conference Id=0x74A, Source Interface=0x3CEEBAA0, Source Call Id=5465,
Destination Call Id=5466, Disposition=0x0, Tag=0x0
.Apr 16 07:41:42.404: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5465/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5466/xxxxxxxxxxxx/CCAPI/cc_api_get_xcode_stream:
.Apr 16 07:41:42.404: cc_api_get_xcode_stream : 4819
.Apr 16 07:41:42.404: //5466/E7549AA0846D/CCAPI/cc_api_bridge_drop_done:
Conference Id=0x74A, Source Interface=0x3CEEBAA0, Source Call Id=5466,
Destination Call Id=5465, Disposition=0x0, Tag=0x0
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_generic_bridge_done:
Conference Id=0x74A, Source Interface=0x3CEEBAA0, Source Call Id=5466,
Destination Call Id=5465, Disposition=0x0, Tag=0x0
.Apr 16 07:41:42.404: //5466/E7549AA0846D/CCAPI/ccCallDisconnect:
Cause Value=38, Tag=0x0, Call Entry(Previous Disconnect Cause=0, Disconnect Cause=0)
.Apr 16 07:41:42.404: //5466/E7549AA0846D/CCAPI/ccCallDisconnect:
Cause Value=38, Call Entry(Responsed=TRUE, Cause Value=38)
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/ccCallDisconnect:
Cause Value=38, Tag=0x0, Call Entry(Previous Disconnect Cause=0, Disconnect Cause=38)
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/ccCallDisconnect:
Cause Value=38, Call Entry(Responsed=TRUE, Cause Value=38)
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_api_call_disconnect_done:
Disposition=-11, Interface=0x3CEEBAA0, Tag=0x0, Call Id=5465,
Call Entry(Disconnect Cause=38, Voice Class Cause Code=0, Retry Count=0)
.Apr 16 07:41:42.404: //-1/E7549AA0846D/RXRULE/regxrule_stack_pop_RegXruleNumInfo: stack=0x22FA7B08; count=1
.Apr 16 07:41:42.404: //-1/E7549AA0846D/RXRULE/regxrule_stack_pop_callinfo_internal: numinfo=0x2105EF64
.Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_api_call_disconnect_done:
Call Disconnect Event Sent
.Apr 16 07:41:42.404: //-1/xxxxxxxxxxxx/CCAPI/cc_free_feature_vsa:
.Apr 16 07:41:42.404: :cc_free_feature_vsa freeing 23191468
.Apr 16 07:41:42.404: //-1/xxxxxxxxxxxx/CCAPI/cc_free_feature_vsa:
.Apr 16 07:41:42.404: vsacount in free is 26
.Apr 16 07:41:42.404: //5466/E7549AA0846D/SIP/Msg/ccsipDisplayMsg:
Sent:
CANCEL sip:0045XXXX76@sip.XXXX.co.uk:5060 SIP/2.0
Via: SIP/2.0/UDP 89.XXX.XXX.42:5060;branch=z9hG4bK1DEE17AF
From: <>>01224XXXX@sip.XXXX.co.uk>;tag=40588C74-2407
To: <>>0045XXXX76@sip.XXXX.co.uk>
Date: Tue, 16 Apr 2013 07:41:37 GMT
Call-ID: E755D2F0-A59F11E2-84739E65-5705CFE7@89.XXX.XXX.42
CSeq: 101 CANCEL
Max-Forwards: 70
Timestamp: 1366098102
Reason: Q.850;cause=38
Content-Length: 0
.Apr 16 07:41:42.428: //5466/E7549AA0846D/SIP/Msg/ccsipDisplayMsg:
Received:
SIP/2.0 200 canceling
Via: SIP/2.0/UDP 89.XXX.XXX.42:5060;branch=z9hG4bK1DEE17AF
From: <>>01224XXXX@sip.XXXX.co.uk>;tag=40588C74-2407
To: <>>0045XXXX76@sip.XXXX.co.uk>;tag=1c2cc042f18046c3e2db24339e8021b2-7086
Call-ID: E755D2F0-A59F11E2-84739E65-5705CFE7@89.XXX.XXX.42
CSeq: 101 CANCEL
Server: XXXX.co.uk 1.5.3
Content-Length: 0
04-16-2013 02:19 AM
Martin,
This call is disconnected from the CUCM with a cuase code of 38. This means "Network out of order" The disconnect is on
callid 5465... which I believe is the call leg between the CUCM and the gateway...We can also see that the cc_api_call_disconnected indicates that this event is inbound to the gateway...Hence I can conclude that CUCM sent the disconnect
Apr 16 07:41:42.404: //5465/E7549AA0846D/CCAPI/cc_api_call_disconnected:
I also observed that we dont see the call logs for the inbound call leg from CUCM.. What are you using from CUCM to the gateway..?? I dont see any sip related logs, so I take it its not sip..but I dont see inbound ccapi logs too..so I dont get...
Can you send your sh run
Please rate all useful posts
"opportunity is a haughty goddess who waste no time with those who are unprepared"
04-16-2013 02:28 AM
04-16-2013 03:49 AM
Looking closer into your logs, When cucm sent an INVITE to the CUBE, the CUBE doesnt not send a Trying back to CUCM and after 5 secs, the call was disconnected from cucm end. I also obsereved that there is no sip messaging sent to CUCM from the CUBE..
Do you have a firewall between CUCM and CUBE?
please send a debug ccsip call..
04-16-2013 04:10 AM
04-16-2013 04:40 AM
OK..Martin, please add this new dial-peer..Calls coming from CUCM will match this dial-peer and sip signalling will be done on the gig0/0 for traffic between cube and cucm..not on gig0/1 as you have it configured..
dial-peer voice 1 voip
rtp payload-type cisco-codec-fax-ind 98
no modem passthrough
session protocol sipv2
incoming called-number.
voice-class codec 1
no voice-class sip outbound-proxy
voice-class sip bind control source-interface GigabitEthernet0/0
voice-class sip bind media source-interface GigabitEthernet0/0
dtmf-relay rtp-nte
fax-relay sg3-to-g3
fax rate 14400
fax protocol t38 version 0 ls-redundancy 0 hs-redundancy 0 fallback none
!
Test again and send the logs..just debug voip ccapi inout and debug ccsip messages
Please rate all useful posts
"opportunity is a haughty goddess who waste no time with those who are unprepared"
04-16-2013 04:50 AM
AHH... so basic issue..
Thank you very much for your assistance.
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