2023-12-20 15:19:48 +00:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
/*
|
|
|
|
* KUnit resource management helpers for SKBs (skbuff).
|
|
|
|
*
|
|
|
|
* Copyright (C) 2023 Intel Corporation
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _KUNIT_SKBUFF_H
|
|
|
|
#define _KUNIT_SKBUFF_H
|
|
|
|
|
|
|
|
#include <kunit/resource.h>
|
|
|
|
#include <linux/skbuff.h>
|
|
|
|
|
|
|
|
static void kunit_action_kfree_skb(void *p)
|
|
|
|
{
|
|
|
|
kfree_skb((struct sk_buff *)p);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* kunit_zalloc_skb() - Allocate and initialize a resource managed skb.
|
|
|
|
* @test: The test case to which the skb belongs
|
|
|
|
* @len: size to allocate
|
2024-11-11 10:54:09 +00:00
|
|
|
* @gfp: allocation flags
|
2023-12-20 15:19:48 +00:00
|
|
|
*
|
2024-11-11 10:54:09 +00:00
|
|
|
* Allocate a new struct sk_buff with gfp flags, zero fill the given length
|
2023-12-20 15:19:48 +00:00
|
|
|
* and add it as a resource to the kunit test for automatic cleanup.
|
|
|
|
*
|
|
|
|
* Returns: newly allocated SKB, or %NULL on error
|
|
|
|
*/
|
|
|
|
static inline struct sk_buff *kunit_zalloc_skb(struct kunit *test, int len,
|
|
|
|
gfp_t gfp)
|
|
|
|
{
|
2024-11-04 17:16:30 +00:00
|
|
|
struct sk_buff *res = alloc_skb(len, gfp);
|
2023-12-20 15:19:48 +00:00
|
|
|
|
|
|
|
if (!res || skb_pad(res, len))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (kunit_add_action_or_reset(test, kunit_action_kfree_skb, res))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* kunit_kfree_skb() - Like kfree_skb except for allocations managed by KUnit.
|
|
|
|
* @test: The test case to which the resource belongs.
|
|
|
|
* @skb: The SKB to free.
|
|
|
|
*/
|
|
|
|
static inline void kunit_kfree_skb(struct kunit *test, struct sk_buff *skb)
|
|
|
|
{
|
|
|
|
if (!skb)
|
|
|
|
return;
|
|
|
|
|
|
|
|
kunit_release_action(test, kunit_action_kfree_skb, (void *)skb);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* _KUNIT_SKBUFF_H */
|