mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-18 01:41:24 +00:00
58 lines
2.0 KiB
Diff
58 lines
2.0 KiB
Diff
From 7c62a1f9d78e34ce5c042d98f2632471a3c3f713 Mon Sep 17 00:00:00 2001
|
|
From: Neelansh Mittal <neelanshm@codeaurora.org>
|
|
Date: Thu, 5 Nov 2020 09:45:05 +0530
|
|
Subject: [PATCH] xfrm: Add API to override state afinfo object.
|
|
|
|
Add a new API that can be used to override the
|
|
currently registered xfrm_state_afinfo object
|
|
with a newly provided one.
|
|
|
|
Change-Id: Ic520dc496e14ddf5803d5769a3bd14cbfd98749c
|
|
Signed-off-by: Neelansh Mittal <neelanshm@codeaurora.org>
|
|
Signed-off-by: Pavithra R <quic_pavir@quicinc.com>
|
|
---
|
|
include/net/xfrm.h | 1 +
|
|
net/xfrm/xfrm_state.c | 14 ++++++++++++++
|
|
2 files changed, 15 insertions(+)
|
|
|
|
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
|
|
index 21808995176f1..f38789ebf482b 100644
|
|
--- a/include/net/xfrm.h
|
|
+++ b/include/net/xfrm.h
|
|
@@ -383,6 +383,7 @@ int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
|
|
int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
|
|
struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family);
|
|
struct xfrm_state_afinfo *xfrm_state_afinfo_get_rcu(unsigned int family);
|
|
+struct xfrm_state_afinfo *xfrm_state_update_afinfo(unsigned int family, struct xfrm_state_afinfo *new);
|
|
|
|
struct xfrm_input_afinfo {
|
|
u8 family;
|
|
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
|
|
index 3d47327fc4509..a63351d3054cb 100644
|
|
--- a/net/xfrm/xfrm_state.c
|
|
+++ b/net/xfrm/xfrm_state.c
|
|
@@ -2555,6 +2555,20 @@ struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
|
|
return afinfo;
|
|
}
|
|
|
|
+struct xfrm_state_afinfo *xfrm_state_update_afinfo(unsigned int family, struct xfrm_state_afinfo *new)
|
|
+{
|
|
+ struct xfrm_state_afinfo *afinfo;
|
|
+
|
|
+ spin_lock_bh(&xfrm_state_afinfo_lock);
|
|
+ afinfo = rcu_dereference_protected(xfrm_state_afinfo[family], lockdep_is_held(&xfrm_state_afinfo_lock));
|
|
+ rcu_assign_pointer(xfrm_state_afinfo[afinfo->family], new);
|
|
+ spin_unlock_bh(&xfrm_state_afinfo_lock);
|
|
+
|
|
+ synchronize_rcu();
|
|
+ return afinfo;
|
|
+}
|
|
+EXPORT_SYMBOL(xfrm_state_update_afinfo);
|
|
+
|
|
void xfrm_flush_gc(void)
|
|
{
|
|
flush_work(&xfrm_state_gc_work);
|
|
--
|
|
2.34.1
|
|
|