diff options
author | Martin Willi <martin@revosec.ch> | 2013-02-06 15:11:46 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-02-06 15:20:32 +0100 |
commit | 5b15bd5f9dd373fd799991ca184f6e6a670b9c8d (patch) | |
tree | 93d7d1840d82b2ad24c63409068ff12e0bca54ce /src | |
parent | 306a269e349eb8cf31f194e3f64d843815261325 (diff) | |
download | strongswan-5b15bd5f9dd373fd799991ca184f6e6a670b9c8d.tar.bz2 strongswan-5b15bd5f9dd373fd799991ca184f6e6a670b9c8d.tar.xz |
Set configured DSCP value while generating IKE packets
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ike_sa.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index 4029db11d..258e562d4 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -939,14 +939,38 @@ METHOD(ike_sa_t, update_hosts, void, } } +/** + * Set configured DSCP value on packet + */ +static void set_dscp(private_ike_sa_t *this, packet_t *packet) +{ + ike_cfg_t *ike_cfg; + + /* prefer IKE config on peer_cfg, as its selection is more accurate + * then the initial IKE config */ + if (this->peer_cfg) + { + ike_cfg = this->peer_cfg->get_ike_cfg(this->peer_cfg); + } + else + { + ike_cfg = this->ike_cfg; + } + if (ike_cfg) + { + packet->set_dscp(packet, ike_cfg->get_dscp(ike_cfg)); + } +} + METHOD(ike_sa_t, generate_message, status_t, private_ike_sa_t *this, message_t *message, packet_t **packet) { status_t status; if (message->is_encoded(message)) - { /* already done */ + { /* already encoded in task, but set DSCP value */ *packet = message->get_packet(message); + set_dscp(this, *packet); return SUCCESS; } this->stats[STAT_OUTBOUND] = time_monotonic(NULL); @@ -955,6 +979,7 @@ METHOD(ike_sa_t, generate_message, status_t, status = message->generate(message, this->keymat, packet); if (status == SUCCESS) { + set_dscp(this, *packet); charon->bus->message(charon->bus, message, FALSE, FALSE); } return status; |