Module: kamailio
Branch: 5.0
Commit: 6c99d6bf7c3372fbc5484c5b8664eba988a0edfd
URL: https://github.com/kamailio/kamailio/commit/6c99d6bf7c3372fbc5484c5b8664eba…
Author: Edwin Fine <edwin(a)2600hz.com>
Committer: Henning Westerholt <hw(a)kamailio.org>
Date: 2018-06-14T08:37:18+02:00
core: fix Makefile.defs errors to include raw socket support
Compiling kamailio on `linux`, `gnu_kfreebsd`, and `freebsd` -
unless `RAW_SOCKS` is set up otherwise -
should automatically enable raw sockets, according to `Makefile.defs`
[L97][]:
# enable raw sockets
RAW_SOCKS ?= yes
ifeq ($(RAW_SOCKS),1)
RAW_SOCKS = yes
endif
By all indications, if `RAW_SOCKS` is unset, set to `1`, or set to `yes`
before this `ifeq` statement, it will be set to `yes` after the `endif`.
The issue arises later on in `Makefile.defs` [L1758][] (and also
[L1808][] and [L1892]):
#os specific stuff
ifeq ($(OS), linux)
# by default use futexes if available
use_futex= yes
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
ifneq ($(RAW_SOCKS), yes) ### <--- The issue ###
C_DEFS+= -DUSE_RAW_SOCKS
endif
Clearly, the `ifneq` should be `ifeq`.
This commit fixes the issue by making the above changes, and `kamailio`
should compile on Linux - by default - with raw sockets support unless
`RAW_SOCKS` is explicitly set prior to evaluation to something other
than `yes` or `1`.
[L97]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1758]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1808]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1892]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
(cherry picked from commit 1d4ee7720c6f609077e4497189103f9a950f4194)
---
Modified: src/Makefile.defs
---
Diff: https://github.com/kamailio/kamailio/commit/6c99d6bf7c3372fbc5484c5b8664eba…
Patch: https://github.com/kamailio/kamailio/commit/6c99d6bf7c3372fbc5484c5b8664eba…
---
diff --git a/src/Makefile.defs b/src/Makefile.defs
index a0ed23218b..dbf6191e8c 100644
--- a/src/Makefile.defs
+++ b/src/Makefile.defs
@@ -1755,7 +1755,7 @@ ifeq ($(OS), linux)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
@@ -1805,7 +1805,7 @@ ifeq ($(OS), gnu_kfreebsd)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
@@ -1889,7 +1889,7 @@ ifeq ($(OS), freebsd)
-DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL \
-DHAVE_CONNECT_ECONNRESET_BUG -DHAVE_TIMEGM \
-DHAVE_NETINET_IN_SYSTM -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
Module: kamailio
Branch: 5.1
Commit: a04c931064d1332a7c23264a33268d3ecec793a2
URL: https://github.com/kamailio/kamailio/commit/a04c931064d1332a7c23264a33268d3…
Author: Edwin Fine <edwin(a)2600hz.com>
Committer: Henning Westerholt <hw(a)kamailio.org>
Date: 2018-06-14T08:36:14+02:00
core: fix Makefile.defs errors to include raw socket support
Compiling kamailio on `linux`, `gnu_kfreebsd`, and `freebsd` -
unless `RAW_SOCKS` is set up otherwise -
should automatically enable raw sockets, according to `Makefile.defs`
[L97][]:
# enable raw sockets
RAW_SOCKS ?= yes
ifeq ($(RAW_SOCKS),1)
RAW_SOCKS = yes
endif
By all indications, if `RAW_SOCKS` is unset, set to `1`, or set to `yes`
before this `ifeq` statement, it will be set to `yes` after the `endif`.
The issue arises later on in `Makefile.defs` [L1758][] (and also
[L1808][] and [L1892]):
#os specific stuff
ifeq ($(OS), linux)
# by default use futexes if available
use_futex= yes
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
ifneq ($(RAW_SOCKS), yes) ### <--- The issue ###
C_DEFS+= -DUSE_RAW_SOCKS
endif
Clearly, the `ifneq` should be `ifeq`.
This commit fixes the issue by making the above changes, and `kamailio`
should compile on Linux - by default - with raw sockets support unless
`RAW_SOCKS` is explicitly set prior to evaluation to something other
than `yes` or `1`.
[L97]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1758]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1808]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1892]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
(cherry picked from commit 1d4ee7720c6f609077e4497189103f9a950f4194)
---
Modified: src/Makefile.defs
---
Diff: https://github.com/kamailio/kamailio/commit/a04c931064d1332a7c23264a33268d3…
Patch: https://github.com/kamailio/kamailio/commit/a04c931064d1332a7c23264a33268d3…
---
diff --git a/src/Makefile.defs b/src/Makefile.defs
index 3b1066da95..9b809b8bfa 100644
--- a/src/Makefile.defs
+++ b/src/Makefile.defs
@@ -1755,7 +1755,7 @@ ifeq ($(OS), linux)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
@@ -1805,7 +1805,7 @@ ifeq ($(OS), gnu_kfreebsd)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
@@ -1889,7 +1889,7 @@ ifeq ($(OS), freebsd)
-DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL \
-DHAVE_CONNECT_ECONNRESET_BUG -DHAVE_TIMEGM \
-DHAVE_NETINET_IN_SYSTM -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
### Description
Kamailio compiles without raw sockets support, even though `src/Makefile.defs` should enable that by default, according to the Makefile.
### Troubleshooting
Not applicable.
#### Reproduction
Build kamailio on Debian 8.10 Linux using the standard `Makefile.defs`, and add `udp4_raw = 0` to the config file. You should get the warning shown in the log message provided below.
#### Debugging Data
Not applicable
#### Log Messages
```
kamailio[89847]: WARNING: <core> [core/cfg.y:3427]: warn_at(): warning in config file <redacted>, line 66, column 12: raw socket support not compiled in
```
#### SIP Traffic
Not Applicable
### Possible Solutions
This is the solution proposed in PR #1564.
```
diff --git a/src/Makefile.defs b/src/Makefile.defs
index 428a236..3a2480c 100644
--- a/src/Makefile.defs
+++ b/src/Makefile.defs
@@ -1755,7 +1755,7 @@ ifeq ($(OS), linux)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
```
### Additional Information
* **Kamailio Version** - output of `kamailio -v`
```
version: kamailio 5.1.3 (x86_64/linux)
flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: unknown
compiled with gcc 4.9.2
```
* **Operating System**:
```
Debian 8.10
Kernel 3.16.0-4-amd64 #1 SMP Debian 3.16.51-3 (2017-12-13) x86_64 GNU/Linux
```
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/1565
#### Pre-Submission Checklist
- [x] Commit message has the format required by CONTRIBUTING guide
- [x] Commits are split per component (core, individual modules, libs, utils, ...)
- [x] Each component has a single commit (if not, squash them into one commit)
- [x] No commits to README files for modules (changes must be done to docbook files
in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
- [ ] PR should be backported to stable branches
- [ ] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
Compiling kamailio on Linux, unless `RAW_SOCKS` is set up otherwise,
should automatically enable raw sockets, according to `Makefile.defs`
[L97][]:
# enable raw sockets
RAW_SOCKS ?= yes
ifeq ($(RAW_SOCKS),1)
RAW_SOCKS = yes
endif
By all indications, if `RAW_SOCKS` is unset, set to `1`, or set to `yes`
before this `ifeq` statement, it will be set to `yes` after the `endif`.
The issue arises later on in `Makefile.defs` [L1758][]:
#os specific stuff
ifeq ($(OS), linux)
# by default use futexes if available
use_futex= yes
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
ifneq ($(RAW_SOCKS), yes) ### <--- The issue ###
C_DEFS+= -DUSE_RAW_SOCKS
endif
Clearly, the `ifneq` should be `ifeq`.
This commit fixes the issue by making the above change, and `kamailio`
should compile on Linux - by default - with raw sockets support unless
`RAW_SOCKS` is explicitly set prior to evaluation to something other
than `yes` or `1`.
[L97]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1758]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/1564
-- Commit Summary --
* core: fix Makefile.defs error to include raw socket support
-- File Changes --
M src/Makefile.defs (2)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/1564.patchhttps://github.com/kamailio/kamailio/pull/1564.diff
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/1564
Module: kamailio
Branch: master
Commit: 1d4ee7720c6f609077e4497189103f9a950f4194
URL: https://github.com/kamailio/kamailio/commit/1d4ee7720c6f609077e4497189103f9…
Author: Edwin Fine <edwin(a)2600hz.com>
Committer: Henning Westerholt <henningw(a)users.noreply.github.com>
Date: 2018-06-14T08:22:49+02:00
core: fix Makefile.defs errors to include raw socket support
Compiling kamailio on `linux`, `gnu_kfreebsd`, and `freebsd` -
unless `RAW_SOCKS` is set up otherwise -
should automatically enable raw sockets, according to `Makefile.defs`
[L97][]:
# enable raw sockets
RAW_SOCKS ?= yes
ifeq ($(RAW_SOCKS),1)
RAW_SOCKS = yes
endif
By all indications, if `RAW_SOCKS` is unset, set to `1`, or set to `yes`
before this `ifeq` statement, it will be set to `yes` after the `endif`.
The issue arises later on in `Makefile.defs` [L1758][] (and also
[L1808][] and [L1892]):
#os specific stuff
ifeq ($(OS), linux)
# by default use futexes if available
use_futex= yes
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
ifneq ($(RAW_SOCKS), yes) ### <--- The issue ###
C_DEFS+= -DUSE_RAW_SOCKS
endif
Clearly, the `ifneq` should be `ifeq`.
This commit fixes the issue by making the above changes, and `kamailio`
should compile on Linux - by default - with raw sockets support unless
`RAW_SOCKS` is explicitly set prior to evaluation to something other
than `yes` or `1`.
[L97]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1758]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1808]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
[L1892]: https://github.com/kamailio/kamailio/blob/a57a96f8fea3a5f7bff068ab0ea0d4c17…
---
Modified: src/Makefile.defs
---
Diff: https://github.com/kamailio/kamailio/commit/1d4ee7720c6f609077e4497189103f9…
Patch: https://github.com/kamailio/kamailio/commit/1d4ee7720c6f609077e4497189103f9…
---
diff --git a/src/Makefile.defs b/src/Makefile.defs
index 428a23674a..8e76de7687 100644
--- a/src/Makefile.defs
+++ b/src/Makefile.defs
@@ -1755,7 +1755,7 @@ ifeq ($(OS), linux)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
@@ -1805,7 +1805,7 @@ ifeq ($(OS), gnu_kfreebsd)
C_DEFS+=-DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \
-DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \
-DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
@@ -1889,7 +1889,7 @@ ifeq ($(OS), freebsd)
-DHAVE_SCHED_YIELD -DHAVE_MSGHDR_MSG_CONTROL \
-DHAVE_CONNECT_ECONNRESET_BUG -DHAVE_TIMEGM \
-DHAVE_NETINET_IN_SYSTM -DHAVE_IP_MREQN
- ifneq ($(RAW_SOCKS), yes)
+ ifeq ($(RAW_SOCKS), yes)
C_DEFS+= -DUSE_RAW_SOCKS
endif
ifneq ($(found_lock_method), yes)
Module: kamailio
Branch: master
Commit: a57a96f8fea3a5f7bff068ab0ea0d4c17c15bb65
URL: https://github.com/kamailio/kamailio/commit/a57a96f8fea3a5f7bff068ab0ea0d4c…
Author: Kamailio Dev <kamailio.dev(a)kamailio.org>
Committer: Kamailio Dev <kamailio.dev(a)kamailio.org>
Date: 2018-06-13T09:16:56+02:00
modules: readme files regenerated - dispatcher ... [skip ci]
---
Modified: src/modules/dispatcher/README
---
Diff: https://github.com/kamailio/kamailio/commit/a57a96f8fea3a5f7bff068ab0ea0d4c…
Patch: https://github.com/kamailio/kamailio/commit/a57a96f8fea3a5f7bff068ab0ea0d4c…
---
diff --git a/src/modules/dispatcher/README b/src/modules/dispatcher/README
index 74a03703b8..9c42d44698 100644
--- a/src/modules/dispatcher/README
+++ b/src/modules/dispatcher/README
@@ -496,10 +496,16 @@ Note
3.12. xavp_dst_mode (int)
Control what fields are added to the XAVP specified by xavp_dst
- parameter. The addeded fields are: the set id (group id), the URI
- address, socket pointer, and destination unique id in case of call load
- distribution algorithm. The attributes are added if xavp_dst_mode does
- not have the bit 1 set.
+ parameter.
+
+ The addeded fields are:
+ * grp - the set id (group id).
+ * uri - the URI address.
+ * sock - the socket pointer.
+ * dstid - the destination unique id (in case of call load
+ distribution algorithm).
+ * attrs - the attributes - they are added if xavp_dst_mode does not
+ have the bit 1 set.
Default value is “0” (add all fields).
@@ -1529,10 +1535,8 @@ modparam("tm", "fr_inv_timer", 40000)
modparam("dispatcher", "db_url", DBURL)
modparam("dispatcher", "table_name", "dispatcher")
modparam("dispatcher", "flags", 2)
-modparam("dispatcher", "dst_avp", "$avp(AVP_DST)")
-modparam("dispatcher", "grp_avp", "$avp(AVP_GRP)")
-modparam("dispatcher", "cnt_avp", "$avp(AVP_CNT)")
-modparam("dispatcher", "sock_avp", "$avp(AVP_SOCK)")
+modparam("dispatcher", "xavp_dst", "_dsdst_")
+modparam("dispatcher", "xavp_ctx", "_dsctx_")
####### Routing Logic ########
@@ -1544,25 +1548,27 @@ request_route {
# per request initial checks
route(REQINIT);
- # handle requests within SIP dialogs
- route(WITHINDLG);
-
- ### only initial requests (no To tag)
-
# CANCEL processing
- if (is_method("CANCEL"))
- {
- if (t_check_trans())
- t_relay();
+ if (is_method("CANCEL")) {
+ if (t_check_trans()) {
+ route(RELAY);
+ }
exit;
}
# handle retransmissions
- if(t_precheck_trans()) {
+ if (!is_method("ACK")) {
+ if(t_precheck_trans()) {
+ t_check_trans();
+ exit;
+ }
t_check_trans();
- exit;
}
- t_check_trans();
+
+ # handle requests within SIP dialogs
+ route(WITHINDLG);
+
+ ### only initial requests (no To tag)
# record routing for dialog forming requests (in case they are routed)
# - remove preloaded route headers
@@ -1673,7 +1679,8 @@ route[DISPATCH] {
send_reply("404", "No destination");
exit;
}
- xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");
+ xdbg("--- SCRIPT: going to <$ru> via <$du> (attrs: $xavp(_dsdst_=>attrs)
+)\n");
t_on_failure("RTF_DISPATCH");
route(RELAY);
exit;
@@ -1688,6 +1695,8 @@ failure_route[RTF_DISPATCH] {
if (t_check_status("500")
or (t_branch_timeout() and !t_branch_replied())) {
if(ds_next_dst()) {
+ xdbg("--- SCRIPT: retrying to <$ru> via <$du> (attrs: $x
+avp(_dsdst_=>attrs))\n");
t_on_failure("RTF_DISPATCH");
route(RELAY);
exit;