The diff below documents locks of 'ipsec_ids', 'ipsec_acquire' and
'ipsec_policy' structures.

I marked `ipa_pcb' as immutable, but we never set or access it and I
want to remove it with the next diff.

Index: sys/netinet/ip_ipsp.h
===================================================================
RCS file: /cvs/src/sys/netinet/ip_ipsp.h,v
retrieving revision 1.200
diff -u -p -r1.200 ip_ipsp.h
--- sys/netinet/ip_ipsp.h       8 Jul 2021 21:07:19 -0000       1.200
+++ sys/netinet/ip_ipsp.h       11 Jul 2021 00:59:18 -0000
@@ -45,6 +45,12 @@
 #include <sys/types.h>
 #include <netinet/in.h>
 
+/*
+ * Locks used to protect struct members in this file:
+ *     I       Immutable after creation
+ *     N       netlock
+ */
+
 union sockaddr_union {
        struct sockaddr         sa;
        struct sockaddr_in      sin;
@@ -230,36 +236,37 @@ struct ipsec_id {
 };
 
 struct ipsec_ids {
-       RBT_ENTRY(ipsec_ids)    id_node_id;
-       RBT_ENTRY(ipsec_ids)    id_node_flow;
-       struct ipsec_id         *id_local;
-       struct ipsec_id         *id_remote;
-       u_int32_t               id_flow;
-       int                     id_refcount;
+       RBT_ENTRY(ipsec_ids)    id_node_id;     /* [N] */
+       RBT_ENTRY(ipsec_ids)    id_node_flow;   /* [N] */
+       struct ipsec_id         *id_local;      /* [I] */
+       struct ipsec_id         *id_remote;     /* [I] */
+       u_int32_t               id_flow;        /* [N] */
+       int                     id_refcount;    /* [N] */
        struct timeout          id_timeout;
 };
 RBT_HEAD(ipsec_ids_flows, ipsec_ids);
 RBT_HEAD(ipsec_ids_tree, ipsec_ids);
 
 struct ipsec_acquire {
-       union sockaddr_union            ipa_addr;
-       u_int32_t                       ipa_seq;
-       struct sockaddr_encap           ipa_info;
-       struct sockaddr_encap           ipa_mask;
+       union sockaddr_union            ipa_addr;       /* [I] */
+       u_int32_t                       ipa_seq;        /* [I] */ 
+       struct sockaddr_encap           ipa_info;       /* [I] */
+       struct sockaddr_encap           ipa_mask;       /* [I] */
        struct timeout                  ipa_timeout;
-       struct ipsec_policy             *ipa_policy;
-       struct inpcb                    *ipa_pcb;
-       TAILQ_ENTRY(ipsec_acquire)      ipa_ipo_next;
-       TAILQ_ENTRY(ipsec_acquire)      ipa_next;
+       struct ipsec_policy             *ipa_policy;    /* [I] */
+       struct inpcb                    *ipa_pcb;       /* [I] */
+       TAILQ_ENTRY(ipsec_acquire)      ipa_ipo_next;   /* [N] */
+       TAILQ_ENTRY(ipsec_acquire)      ipa_next;       /* [N] */
 };
 
 struct ipsec_policy {
        struct radix_node       ipo_nodes[2];   /* radix tree glue */
-       struct sockaddr_encap   ipo_addr;
-       struct sockaddr_encap   ipo_mask;
+       struct sockaddr_encap   ipo_addr;       /* [I] */
+       struct sockaddr_encap   ipo_mask;       /* [I] */
 
-       union sockaddr_union    ipo_src;        /* Local address to use */
-       union sockaddr_union    ipo_dst;        /* Remote gateway -- if it's 
zeroed:
+       union sockaddr_union    ipo_src;        /* [N] Local address to use */
+       union sockaddr_union    ipo_dst;        /* [N] Remote gateway --
+                                                * if it's zeroed:
                                                 * - on output, we try to
                                                 * contact the remote host
                                                 * directly (if needed).
@@ -270,22 +277,28 @@ struct ipsec_policy {
                                                 * mode was used.
                                                 */
 
-       u_int64_t               ipo_last_searched;      /* Timestamp of last 
lookup */
-
-       u_int8_t                ipo_flags;      /* See IPSP_POLICY_* 
definitions */
-       u_int8_t                ipo_type;       /* USE/ACQUIRE/... */
-       u_int8_t                ipo_sproto;     /* ESP/AH; if zero, use system 
dflts */
-       u_int                   ipo_rdomain;
-
-       int                     ipo_ref_count;
-
-       struct tdb              *ipo_tdb;               /* Cached entry */
-
-       struct ipsec_ids        *ipo_ids;
+       u_int64_t               ipo_last_searched;      /* [N] Timestamp
+                                                          of last lookup */
 
-       TAILQ_HEAD(ipo_acquires_head, ipsec_acquire) ipo_acquires; /* List of 
acquires */
-       TAILQ_ENTRY(ipsec_policy)       ipo_tdb_next;   /* List TDB policies */
-       TAILQ_ENTRY(ipsec_policy)       ipo_list;       /* List of all policies 
*/
+       u_int8_t                ipo_flags;      /* [N] See IPSP_POLICY_*
+                                                  definitions */
+       u_int8_t                ipo_type;       /* [N] USE/ACQUIRE/... */
+       u_int8_t                ipo_sproto;     /* [N] ESP/AH; if zero,
+                                                  use system dflts */
+       u_int                   ipo_rdomain;    /* [I] */
+
+       int                     ipo_ref_count;  /* [N] */
+
+       struct tdb              *ipo_tdb;       /* [N] Cached entry */
+
+       struct ipsec_ids        *ipo_ids;       /* [N] */
+
+       TAILQ_HEAD(ipo_acquires_head, ipsec_acquire) ipo_acquires; /* [N]
+                                                       List of acquires */
+       TAILQ_ENTRY(ipsec_policy)       ipo_tdb_next;   /* [N] List TDB
+                                                          policies */
+       TAILQ_ENTRY(ipsec_policy)       ipo_list;       /* [N] List of all
+                                                          policies */
 };
 
 #define        IPSP_POLICY_NONE        0x0000  /* No flags set */

Reply via email to