diff options
author | Jiri Pirko <jiri@resnulli.us> | 2013-04-05 15:00:57 +0200 |
---|---|---|
committer | Jiri Pirko <jiri@resnulli.us> | 2013-04-05 16:30:16 +0200 |
commit | 87e1c69a6e3b6e11a074bbbfcb5b930976331247 (patch) | |
tree | e659ef7e667d2207fe181969115687a57ef4b805 /libndp | |
parent | 8296a5bf075543eef2167afdfecb222e70866744 (diff) | |
download | libndp-87e1c69a6e3b6e11a074bbbfcb5b930976331247.tar.gz |
add support for Default Router Preference in RA msg (rfc4191)
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Diffstat (limited to 'libndp')
-rw-r--r-- | libndp/libndp.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libndp/libndp.c b/libndp/libndp.c index 8eaa16b..631abfb 100644 --- a/libndp/libndp.c +++ b/libndp/libndp.c @@ -853,6 +853,45 @@ void ndp_msgra_flag_home_agent_set(struct ndp_msgra *msgra, } /** + * ndp_msgra_route_preference: + * @msgra: RA message structure + * + * Get route preference. + * + * Returns: route preference. + **/ +NDP_EXPORT +enum ndp_route_preference ndp_msgra_route_preference(struct ndp_msgra *msgra) +{ + uint8_t prf = (msgra->ra->nd_ra_flags_reserved >> 3) & 3; + + /* rfc4191 says: + * If the Router Lifetime is zero, the preference value MUST be set to + * (00) by the sender and MUST be ignored by the receiver. + * If the Reserved (10) value is received, the receiver MUST treat the + * value as if it were (00). + */ + if (prf == 2 || !ndp_msgra_router_lifetime(msgra)) + prf = 0; + return prf; +} + +/** + * ndp_msgra_route_preference_set: + * @msgra: RA message structure + * @pref: preference + * + * Set route preference. + **/ +NDP_EXPORT +void ndp_msgra_route_preference_set(struct ndp_msgra *msgra, + enum ndp_route_preference pref) +{ + msgra->ra->nd_ra_flags_reserved &= ~(3 << 3); + msgra->ra->nd_ra_flags_reserved |= (pref << 3); +} + +/** * ndp_msgra_router_lifetime: * @msgra: RA message structure * |