diff options
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/gprs_ns.h | 1 | ||||
-rw-r--r-- | openbsc/src/libgb/gprs_ns.c | 10 | ||||
-rw-r--r-- | openbsc/src/libgb/gprs_ns_vty.c | 14 |
3 files changed, 24 insertions, 1 deletions
diff --git a/openbsc/include/openbsc/gprs_ns.h b/openbsc/include/openbsc/gprs_ns.h index 8f28d4623..e8a143ebc 100644 --- a/openbsc/include/openbsc/gprs_ns.h +++ b/openbsc/include/openbsc/gprs_ns.h @@ -136,6 +136,7 @@ struct gprs_ns_inst { struct osmo_fd fd; uint32_t local_ip; uint16_t local_port; + int dscp; } nsip; /* NS-over-FR-over-GRE-over-IP specific bits */ struct { diff --git a/openbsc/src/libgb/gprs_ns.c b/openbsc/src/libgb/gprs_ns.c index dab57e663..67a52f6c6 100644 --- a/openbsc/src/libgb/gprs_ns.c +++ b/openbsc/src/libgb/gprs_ns.c @@ -853,7 +853,6 @@ void gprs_ns_destroy(struct gprs_ns_inst *nsi) talloc_free(nsi); } - /* NS-over-IP code, according to 3GPP TS 48.016 Chapter 6.2 * We don't support Size Procedure, Configuration Procedure, ChangeWeight Procedure */ @@ -952,6 +951,15 @@ int gprs_ns_nsip_listen(struct gprs_ns_inst *nsi) nsi->nsip.fd.data = nsi; + ret = setsockopt(nsi->nsip.fd.fd, IPPROTO_IP, IP_TOS, + &nsi->nsip.dscp, sizeof(nsi->nsip.dscp)); + if (ret < 0) + LOGP(DNS, LOGL_ERROR, + "Failed to set the DSCP to %d with ret(%d) errno(%d)\n", + nsi->nsip.dscp, ret, errno); + + + return ret; } diff --git a/openbsc/src/libgb/gprs_ns_vty.c b/openbsc/src/libgb/gprs_ns_vty.c index 14d7691dd..a9b35d80b 100644 --- a/openbsc/src/libgb/gprs_ns_vty.c +++ b/openbsc/src/libgb/gprs_ns_vty.c @@ -121,6 +121,9 @@ static int config_write_ns(struct vty *vty) if (vty_nsi->nsip.local_port) vty_out(vty, " encapsulation udp local-port %u%s", vty_nsi->nsip.local_port, VTY_NEWLINE); + if (vty_nsi->nsip.dscp) + vty_out(vty, " encapsulation udp dscp %d%s", + vty_nsi->nsip.dscp, VTY_NEWLINE); vty_out(vty, " encapsulation framerelay-gre enabled %u%s", vty_nsi->frgre.enabled ? 1 : 0, VTY_NEWLINE); @@ -444,6 +447,16 @@ DEFUN(cfg_nsip_local_port, cfg_nsip_local_port_cmd, return CMD_SUCCESS; } +DEFUN(cfg_nsip_dscp, cfg_nsip_dscp_cmd, + "encapsulation udp dscp <0-255>", + ENCAPS_STR "NS over UDP Encapsulation\n" + "Set DSCP/TOS on the UDP socket\n" "DSCP Value\n") +{ + int dscp = atoi(argv[0]); + vty_nsi->nsip.dscp = dscp; + return CMD_SUCCESS; +} + DEFUN(cfg_frgre_local_ip, cfg_frgre_local_ip_cmd, "encapsulation framerelay-gre local-ip A.B.C.D", ENCAPS_STR "NS over Frame Relay over GRE Encapsulation\n" @@ -561,6 +574,7 @@ int gprs_ns_vty_init(struct gprs_ns_inst *nsi) install_element(NS_NODE, &cfg_ns_timer_cmd); install_element(NS_NODE, &cfg_nsip_local_ip_cmd); install_element(NS_NODE, &cfg_nsip_local_port_cmd); + install_element(NS_NODE, &cfg_nsip_dscp_cmd); install_element(NS_NODE, &cfg_frgre_enable_cmd); install_element(NS_NODE, &cfg_frgre_local_ip_cmd); |