aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-08-04 19:37:26 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2023-08-07 19:16:24 +0200
commita49a2b4d704a502513cd012add3d0a1f7576e7b0 (patch)
treebd611e89c3b70ee73a2eff76a40a2e918581d4ab
parentbcfa37ade0a8ec3e325347adb23ba3cc102e0554 (diff)
stream_srv: Log SCTP REMOTE_ERROR events
The event was enabled but was not being logged. Change-Id: I49f5a648fd474e320101424fb6873a37442339bf
-rw-r--r--include/osmocom/netif/sctp.h21
-rw-r--r--src/sctp.c18
-rw-r--r--src/stream_srv.c4
3 files changed, 43 insertions, 0 deletions
diff --git a/include/osmocom/netif/sctp.h b/include/osmocom/netif/sctp.h
index f0c52cf..bb8acda 100644
--- a/include/osmocom/netif/sctp.h
+++ b/include/osmocom/netif/sctp.h
@@ -27,3 +27,24 @@ enum sctp_sn_error;
extern const struct value_string osmo_sctp_sn_error_strs[];
static inline const char *osmo_sctp_sn_error_str(enum sctp_sn_error val)
{ return get_value_string(osmo_sctp_sn_error_strs, val); }
+
+enum osmo_sctp_op_error {
+ OSMO_SCTP_OP_ERR_INVALID_STREAM_ID = 1,
+ OSMO_SCTP_OP_ERR_MISS_MAND_PARAM = 2,
+ OSMO_SCTP_OP_ERR_STALE_COOKIE = 3,
+ OSMO_SCTP_OP_ERR_NO_RESOURCES = 4,
+ OSMO_SCTP_OP_ERR_UNRESOLV_ADDR = 5,
+ OSMO_SCTP_OP_ERR_UNKN_CHUNK_TYPE = 6,
+ OSMO_SCTP_OP_ERR_INVALID_MAND_PARAM = 7,
+ OSMO_SCTP_OP_ERR_UNKN_PARAM = 8,
+ OSMO_SCTP_OP_ERR_NO_USER_DATA = 9,
+ OSMO_SCTP_OP_ERR_COOKIE_RX_WHILE_SHUTDOWN = 10,
+ OSMO_SCTP_OP_ERR_RESTART_ASSC_NEW_ADDR = 11,
+ OSMO_SCTP_OP_ERR_UNER_INITED_ABORT = 12,
+ OSMO_SCTP_OP_ERR_PROTO_VERSION = 13,
+};
+
+
+extern const struct value_string osmo_sctp_op_error_strs[];
+static inline const char *osmo_sctp_op_error_str(enum osmo_sctp_op_error val)
+{ return get_value_string(osmo_sctp_op_error_strs, val); }
diff --git a/src/sctp.c b/src/sctp.c
index c1b57db..7f4f54b 100644
--- a/src/sctp.c
+++ b/src/sctp.c
@@ -51,3 +51,21 @@ const struct value_string osmo_sctp_sn_error_strs[] = {
{ SCTP_PEER_FAULTY, "PEER_FAULTY" },
{ 0, NULL }
};
+
+/* rfc4960 section 3.3.10 "Operation Error", in host byte order */
+const struct value_string osmo_sctp_op_error_strs[] = {
+ { OSMO_SCTP_OP_ERR_INVALID_STREAM_ID, "Invalid Stream Identifier" },
+ { OSMO_SCTP_OP_ERR_MISS_MAND_PARAM, "Missing Mandatory Parameter" },
+ { OSMO_SCTP_OP_ERR_STALE_COOKIE, "Stale Cookie Error" },
+ { OSMO_SCTP_OP_ERR_NO_RESOURCES, "Out of Resource" },
+ { OSMO_SCTP_OP_ERR_UNRESOLV_ADDR, "Unresolvable Address" },
+ { OSMO_SCTP_OP_ERR_UNKN_CHUNK_TYPE, "Unrecognized Chunk Type" },
+ { OSMO_SCTP_OP_ERR_INVALID_MAND_PARAM, "Invalid Mandatory Parameter" },
+ { OSMO_SCTP_OP_ERR_UNKN_PARAM, "Unrecognized Parameters" },
+ { OSMO_SCTP_OP_ERR_NO_USER_DATA, "No User Data" },
+ { OSMO_SCTP_OP_ERR_COOKIE_RX_WHILE_SHUTDOWN, "Cookie Received While Shutting Down" },
+ { OSMO_SCTP_OP_ERR_RESTART_ASSC_NEW_ADDR, "Restart of an Association with New Addresses" },
+ { OSMO_SCTP_OP_ERR_UNER_INITED_ABORT, "User Initiated Abort" },
+ { OSMO_SCTP_OP_ERR_PROTO_VERSION, "Protocol Violation" },
+ { 0, NULL }
+};
diff --git a/src/stream_srv.c b/src/stream_srv.c
index 6c50a69..3625ffd 100644
--- a/src/stream_srv.c
+++ b/src/stream_srv.c
@@ -891,6 +891,10 @@ static int _sctp_recvmsg_wrapper(int fd, struct msgb *msg)
/* RFC6458 3.1.4: Any attempt to send more data will cause sendmsg()
* to return with an ESHUTDOWN error. */
break;
+ case SCTP_REMOTE_ERROR:
+ LOGP(DLINP, LOGL_DEBUG, "===> REMOTE ERROR: %s\n",
+ osmo_sctp_op_error_str(ntohs(notif->sn_remote_error.sre_error)));
+ break;
}
return -EAGAIN;
}