Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: mctp: test: move functions into utils.[ch]

A future change will add another mctp test .c file, so move some of the
common test setup from route.c into the utils object.

Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
Link: https://patch.msgid.link/20250702-dev-forwarding-v5-7-1468191da8a4@codeconstruct.com.au
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Jeremy Kerr and committed by
Paolo Abeni
80bcf05e 46ee1646

+182 -163
-163
net/mctp/test/route-test.c
··· 8 8 9 9 #include "utils.h" 10 10 11 - struct mctp_test_route { 12 - struct mctp_route rt; 13 - }; 14 - 15 - static const unsigned int test_pktqueue_magic = 0x5f713aef; 16 - 17 - struct mctp_test_pktqueue { 18 - unsigned int magic; 19 - struct sk_buff_head pkts; 20 - }; 21 - 22 - static void mctp_test_pktqueue_init(struct mctp_test_pktqueue *tpq) 23 - { 24 - tpq->magic = test_pktqueue_magic; 25 - skb_queue_head_init(&tpq->pkts); 26 - } 27 - 28 - static int mctp_test_dst_output(struct mctp_dst *dst, struct sk_buff *skb) 29 - { 30 - struct kunit *test = current->kunit_test; 31 - struct mctp_test_pktqueue *tpq = test->priv; 32 - 33 - KUNIT_ASSERT_EQ(test, tpq->magic, test_pktqueue_magic); 34 - 35 - skb_queue_tail(&tpq->pkts, skb); 36 - 37 - return 0; 38 - } 39 - 40 - /* local version of mctp_route_alloc() */ 41 - static struct mctp_test_route *mctp_route_test_alloc(void) 42 - { 43 - struct mctp_test_route *rt; 44 - 45 - rt = kzalloc(sizeof(*rt), GFP_KERNEL); 46 - if (!rt) 47 - return NULL; 48 - 49 - INIT_LIST_HEAD(&rt->rt.list); 50 - refcount_set(&rt->rt.refs, 1); 51 - rt->rt.output = mctp_test_dst_output; 52 - 53 - return rt; 54 - } 55 - 56 - static struct mctp_test_route *mctp_test_create_route(struct net *net, 57 - struct mctp_dev *dev, 58 - mctp_eid_t eid, 59 - unsigned int mtu) 60 - { 61 - struct mctp_test_route *rt; 62 - 63 - rt = mctp_route_test_alloc(); 64 - if (!rt) 65 - return NULL; 66 - 67 - rt->rt.min = eid; 68 - rt->rt.max = eid; 69 - rt->rt.mtu = mtu; 70 - rt->rt.type = RTN_UNSPEC; 71 - if (dev) 72 - mctp_dev_hold(dev); 73 - rt->rt.dev = dev; 74 - 75 - list_add_rcu(&rt->rt.list, &net->mctp.routes); 76 - 77 - return rt; 78 - } 79 - 80 - /* Convenience function for our test dst; release with mctp_test_dst_release() 81 - */ 82 - static void mctp_test_dst_setup(struct kunit *test, struct mctp_dst *dst, 83 - struct mctp_test_dev *dev, 84 - struct mctp_test_pktqueue *tpq, 85 - unsigned int mtu) 86 - { 87 - KUNIT_EXPECT_NOT_ERR_OR_NULL(test, dev); 88 - 89 - memset(dst, 0, sizeof(*dst)); 90 - 91 - dst->dev = dev->mdev; 92 - __mctp_dev_get(dst->dev->dev); 93 - dst->mtu = mtu; 94 - dst->output = mctp_test_dst_output; 95 - mctp_test_pktqueue_init(tpq); 96 - test->priv = tpq; 97 - } 98 - 99 - static void mctp_test_dst_release(struct mctp_dst *dst, 100 - struct mctp_test_pktqueue *tpq) 101 - { 102 - mctp_dst_release(dst); 103 - skb_queue_purge(&tpq->pkts); 104 - } 105 - 106 - static void mctp_test_route_destroy(struct kunit *test, 107 - struct mctp_test_route *rt) 108 - { 109 - unsigned int refs; 110 - 111 - rtnl_lock(); 112 - list_del_rcu(&rt->rt.list); 113 - rtnl_unlock(); 114 - 115 - if (rt->rt.dev) 116 - mctp_dev_put(rt->rt.dev); 117 - 118 - refs = refcount_read(&rt->rt.refs); 119 - KUNIT_ASSERT_EQ_MSG(test, refs, 1, "route ref imbalance"); 120 - 121 - kfree_rcu(&rt->rt, rcu); 122 - } 123 - 124 - static void mctp_test_skb_set_dev(struct sk_buff *skb, 125 - struct mctp_test_dev *dev) 126 - { 127 - struct mctp_skb_cb *cb; 128 - 129 - cb = mctp_cb(skb); 130 - cb->net = READ_ONCE(dev->mdev->net); 131 - skb->dev = dev->ndev; 132 - } 133 - 134 - static struct sk_buff *mctp_test_create_skb(const struct mctp_hdr *hdr, 135 - unsigned int data_len) 136 - { 137 - size_t hdr_len = sizeof(*hdr); 138 - struct sk_buff *skb; 139 - unsigned int i; 140 - u8 *buf; 141 - 142 - skb = alloc_skb(hdr_len + data_len, GFP_KERNEL); 143 - if (!skb) 144 - return NULL; 145 - 146 - __mctp_cb(skb); 147 - memcpy(skb_put(skb, hdr_len), hdr, hdr_len); 148 - 149 - buf = skb_put(skb, data_len); 150 - for (i = 0; i < data_len; i++) 151 - buf[i] = i & 0xff; 152 - 153 - return skb; 154 - } 155 - 156 - static struct sk_buff *__mctp_test_create_skb_data(const struct mctp_hdr *hdr, 157 - const void *data, 158 - size_t data_len) 159 - { 160 - size_t hdr_len = sizeof(*hdr); 161 - struct sk_buff *skb; 162 - 163 - skb = alloc_skb(hdr_len + data_len, GFP_KERNEL); 164 - if (!skb) 165 - return NULL; 166 - 167 - __mctp_cb(skb); 168 - memcpy(skb_put(skb, hdr_len), hdr, hdr_len); 169 - memcpy(skb_put(skb, data_len), data, data_len); 170 - 171 - return skb; 172 - } 173 - 174 11 #define mctp_test_create_skb_data(h, d) \ 175 12 __mctp_test_create_skb_data(h, d, sizeof(*d)) 176 13
+150
net/mctp/test/utils.c
··· 82 82 mctp_dev_put(dev->mdev); 83 83 unregister_netdev(dev->ndev); 84 84 } 85 + 86 + static const unsigned int test_pktqueue_magic = 0x5f713aef; 87 + 88 + void mctp_test_pktqueue_init(struct mctp_test_pktqueue *tpq) 89 + { 90 + tpq->magic = test_pktqueue_magic; 91 + skb_queue_head_init(&tpq->pkts); 92 + } 93 + 94 + static int mctp_test_dst_output(struct mctp_dst *dst, struct sk_buff *skb) 95 + { 96 + struct kunit *test = current->kunit_test; 97 + struct mctp_test_pktqueue *tpq = test->priv; 98 + 99 + KUNIT_ASSERT_EQ(test, tpq->magic, test_pktqueue_magic); 100 + 101 + skb_queue_tail(&tpq->pkts, skb); 102 + 103 + return 0; 104 + } 105 + 106 + /* local version of mctp_route_alloc() */ 107 + static struct mctp_test_route *mctp_route_test_alloc(void) 108 + { 109 + struct mctp_test_route *rt; 110 + 111 + rt = kzalloc(sizeof(*rt), GFP_KERNEL); 112 + if (!rt) 113 + return NULL; 114 + 115 + INIT_LIST_HEAD(&rt->rt.list); 116 + refcount_set(&rt->rt.refs, 1); 117 + rt->rt.output = mctp_test_dst_output; 118 + 119 + return rt; 120 + } 121 + 122 + struct mctp_test_route *mctp_test_create_route(struct net *net, 123 + struct mctp_dev *dev, 124 + mctp_eid_t eid, 125 + unsigned int mtu) 126 + { 127 + struct mctp_test_route *rt; 128 + 129 + rt = mctp_route_test_alloc(); 130 + if (!rt) 131 + return NULL; 132 + 133 + rt->rt.min = eid; 134 + rt->rt.max = eid; 135 + rt->rt.mtu = mtu; 136 + rt->rt.type = RTN_UNSPEC; 137 + if (dev) 138 + mctp_dev_hold(dev); 139 + rt->rt.dev = dev; 140 + 141 + list_add_rcu(&rt->rt.list, &net->mctp.routes); 142 + 143 + return rt; 144 + } 145 + 146 + /* Convenience function for our test dst; release with mctp_test_dst_release() 147 + */ 148 + void mctp_test_dst_setup(struct kunit *test, struct mctp_dst *dst, 149 + struct mctp_test_dev *dev, 150 + struct mctp_test_pktqueue *tpq, unsigned int mtu) 151 + { 152 + KUNIT_EXPECT_NOT_ERR_OR_NULL(test, dev); 153 + 154 + memset(dst, 0, sizeof(*dst)); 155 + 156 + dst->dev = dev->mdev; 157 + __mctp_dev_get(dst->dev->dev); 158 + dst->mtu = mtu; 159 + dst->output = mctp_test_dst_output; 160 + mctp_test_pktqueue_init(tpq); 161 + test->priv = tpq; 162 + } 163 + 164 + void mctp_test_dst_release(struct mctp_dst *dst, 165 + struct mctp_test_pktqueue *tpq) 166 + { 167 + mctp_dst_release(dst); 168 + skb_queue_purge(&tpq->pkts); 169 + } 170 + 171 + void mctp_test_route_destroy(struct kunit *test, struct mctp_test_route *rt) 172 + { 173 + unsigned int refs; 174 + 175 + rtnl_lock(); 176 + list_del_rcu(&rt->rt.list); 177 + rtnl_unlock(); 178 + 179 + if (rt->rt.dev) 180 + mctp_dev_put(rt->rt.dev); 181 + 182 + refs = refcount_read(&rt->rt.refs); 183 + KUNIT_ASSERT_EQ_MSG(test, refs, 1, "route ref imbalance"); 184 + 185 + kfree_rcu(&rt->rt, rcu); 186 + } 187 + 188 + void mctp_test_skb_set_dev(struct sk_buff *skb, struct mctp_test_dev *dev) 189 + { 190 + struct mctp_skb_cb *cb; 191 + 192 + cb = mctp_cb(skb); 193 + cb->net = READ_ONCE(dev->mdev->net); 194 + skb->dev = dev->ndev; 195 + } 196 + 197 + struct sk_buff *mctp_test_create_skb(const struct mctp_hdr *hdr, 198 + unsigned int data_len) 199 + { 200 + size_t hdr_len = sizeof(*hdr); 201 + struct sk_buff *skb; 202 + unsigned int i; 203 + u8 *buf; 204 + 205 + skb = alloc_skb(hdr_len + data_len, GFP_KERNEL); 206 + if (!skb) 207 + return NULL; 208 + 209 + __mctp_cb(skb); 210 + memcpy(skb_put(skb, hdr_len), hdr, hdr_len); 211 + 212 + buf = skb_put(skb, data_len); 213 + for (i = 0; i < data_len; i++) 214 + buf[i] = i & 0xff; 215 + 216 + return skb; 217 + } 218 + 219 + struct sk_buff *__mctp_test_create_skb_data(const struct mctp_hdr *hdr, 220 + const void *data, size_t data_len) 221 + { 222 + size_t hdr_len = sizeof(*hdr); 223 + struct sk_buff *skb; 224 + 225 + skb = alloc_skb(hdr_len + data_len, GFP_KERNEL); 226 + if (!skb) 227 + return NULL; 228 + 229 + __mctp_cb(skb); 230 + memcpy(skb_put(skb, hdr_len), hdr, hdr_len); 231 + memcpy(skb_put(skb, data_len), data, data_len); 232 + 233 + return skb; 234 + }
+32
net/mctp/test/utils.h
··· 5 5 6 6 #include <uapi/linux/netdevice.h> 7 7 8 + #include <net/mctp.h> 9 + #include <net/mctpdevice.h> 10 + 8 11 #include <kunit/test.h> 9 12 10 13 #define MCTP_DEV_TEST_MTU 68 ··· 22 19 23 20 struct mctp_test_dev; 24 21 22 + struct mctp_test_route { 23 + struct mctp_route rt; 24 + }; 25 + 26 + struct mctp_test_pktqueue { 27 + unsigned int magic; 28 + struct sk_buff_head pkts; 29 + }; 30 + 25 31 struct mctp_test_dev *mctp_test_create_dev(void); 26 32 struct mctp_test_dev *mctp_test_create_dev_lladdr(unsigned short lladdr_len, 27 33 const unsigned char *lladdr); 28 34 void mctp_test_destroy_dev(struct mctp_test_dev *dev); 35 + 36 + struct mctp_test_route *mctp_test_create_route(struct net *net, 37 + struct mctp_dev *dev, 38 + mctp_eid_t eid, 39 + unsigned int mtu); 40 + void mctp_test_dst_setup(struct kunit *test, struct mctp_dst *dst, 41 + struct mctp_test_dev *dev, 42 + struct mctp_test_pktqueue *tpq, unsigned int mtu); 43 + void mctp_test_dst_release(struct mctp_dst *dst, 44 + struct mctp_test_pktqueue *tpq); 45 + void mctp_test_pktqueue_init(struct mctp_test_pktqueue *tpq); 46 + void mctp_test_route_destroy(struct kunit *test, struct mctp_test_route *rt); 47 + void mctp_test_skb_set_dev(struct sk_buff *skb, struct mctp_test_dev *dev); 48 + struct sk_buff *mctp_test_create_skb(const struct mctp_hdr *hdr, 49 + unsigned int data_len); 50 + struct sk_buff *__mctp_test_create_skb_data(const struct mctp_hdr *hdr, 51 + const void *data, size_t data_len); 52 + 53 + #define mctp_test_create_skb_data(h, d) \ 54 + __mctp_test_create_skb_data(h, d, sizeof(*d)) 29 55 30 56 #endif /* __NET_MCTP_TEST_UTILS_H */