summaryrefslogtreecommitdiff
path: root/libndp
diff options
context:
space:
mode:
authorJiri Pirko <jiri@resnulli.us>2013-04-05 15:00:57 +0200
committerJiri Pirko <jiri@resnulli.us>2013-04-05 16:30:16 +0200
commit87e1c69a6e3b6e11a074bbbfcb5b930976331247 (patch)
treee659ef7e667d2207fe181969115687a57ef4b805 /libndp
parent8296a5bf075543eef2167afdfecb222e70866744 (diff)
downloadlibndp-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.c39
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
*