Lines Matching +full:uapi +full:- +full:group
1 // SPDX-License-Identifier: GPL-2.0
14 #include <uapi/linux/ip.h>
15 #include <uapi/linux/udp.h>
26 struct psample_group *group; member
53 eth_random_addr(eth->h_dest); in nsim_dev_psample_skb_build()
54 eth_random_addr(eth->h_source); in nsim_dev_psample_skb_build()
55 eth->h_proto = htons(ETH_P_IP); in nsim_dev_psample_skb_build()
56 skb->protocol = htons(ETH_P_IP); in nsim_dev_psample_skb_build()
58 skb_set_network_header(skb, skb->len); in nsim_dev_psample_skb_build()
60 iph->protocol = IPPROTO_UDP; in nsim_dev_psample_skb_build()
61 iph->saddr = in_aton("192.0.2.1"); in nsim_dev_psample_skb_build()
62 iph->daddr = in_aton("198.51.100.1"); in nsim_dev_psample_skb_build()
63 iph->version = 0x4; in nsim_dev_psample_skb_build()
64 iph->frag_off = 0; in nsim_dev_psample_skb_build()
65 iph->ihl = 0x5; in nsim_dev_psample_skb_build()
66 iph->tot_len = htons(tot_len); in nsim_dev_psample_skb_build()
67 iph->id = 0; in nsim_dev_psample_skb_build()
68 iph->ttl = 100; in nsim_dev_psample_skb_build()
69 iph->check = 0; in nsim_dev_psample_skb_build()
70 iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl); in nsim_dev_psample_skb_build()
72 skb_set_transport_header(skb, skb->len); in nsim_dev_psample_skb_build()
74 get_random_bytes(&udph->source, sizeof(u16)); in nsim_dev_psample_skb_build()
75 get_random_bytes(&udph->dest, sizeof(u16)); in nsim_dev_psample_skb_build()
76 udph->len = htons(sizeof(struct udphdr) + data_len); in nsim_dev_psample_skb_build()
85 md->trunc_size = psample->trunc_size ? psample->trunc_size : len; in nsim_dev_psample_md_prepare()
86 md->in_ifindex = psample->in_ifindex; in nsim_dev_psample_md_prepare()
87 md->out_ifindex = psample->out_ifindex; in nsim_dev_psample_md_prepare()
89 if (psample->out_tc != NSIM_PSAMPLE_INVALID_TC) { in nsim_dev_psample_md_prepare()
90 md->out_tc = psample->out_tc; in nsim_dev_psample_md_prepare()
91 md->out_tc_valid = 1; in nsim_dev_psample_md_prepare()
94 if (psample->out_tc_occ_max) { in nsim_dev_psample_md_prepare()
98 md->out_tc_occ = out_tc_occ & (psample->out_tc_occ_max - 1); in nsim_dev_psample_md_prepare()
99 md->out_tc_occ_valid = 1; in nsim_dev_psample_md_prepare()
102 if (psample->latency_max) { in nsim_dev_psample_md_prepare()
106 md->latency = latency & (psample->latency_max - 1); in nsim_dev_psample_md_prepare()
107 md->latency_valid = 1; in nsim_dev_psample_md_prepare()
124 nsim_dev_psample_md_prepare(psample, &md, skb->len); in nsim_dev_psample_report_work()
125 psample_sample_packet(psample->group, skb, psample->rate, &md); in nsim_dev_psample_report_work()
130 schedule_delayed_work(&psample->psample_dw, delay); in nsim_dev_psample_report_work()
135 struct nsim_dev_psample *psample = nsim_dev->psample; in nsim_dev_psample_enable()
139 if (psample->is_active) in nsim_dev_psample_enable()
140 return -EBUSY; in nsim_dev_psample_enable()
143 psample->group = psample_group_get(devlink_net(devlink), in nsim_dev_psample_enable()
144 psample->group_num); in nsim_dev_psample_enable()
145 if (!psample->group) in nsim_dev_psample_enable()
146 return -EINVAL; in nsim_dev_psample_enable()
149 schedule_delayed_work(&psample->psample_dw, delay); in nsim_dev_psample_enable()
151 psample->is_active = true; in nsim_dev_psample_enable()
158 struct nsim_dev_psample *psample = nsim_dev->psample; in nsim_dev_psample_disable()
160 if (!psample->is_active) in nsim_dev_psample_disable()
161 return -EINVAL; in nsim_dev_psample_disable()
163 psample->is_active = false; in nsim_dev_psample_disable()
165 cancel_delayed_work_sync(&psample->psample_dw); in nsim_dev_psample_disable()
166 psample_group_put(psample->group); in nsim_dev_psample_disable()
175 struct nsim_dev *nsim_dev = file->private_data; in nsim_dev_psample_enable_write()
205 return -ENOMEM; in nsim_dev_psample_init()
206 nsim_dev->psample = psample; in nsim_dev_psample_init()
208 INIT_DELAYED_WORK(&psample->psample_dw, nsim_dev_psample_report_work); in nsim_dev_psample_init()
210 psample->ddir = debugfs_create_dir("psample", nsim_dev->ddir); in nsim_dev_psample_init()
211 if (IS_ERR(psample->ddir)) { in nsim_dev_psample_init()
212 err = PTR_ERR(psample->ddir); in nsim_dev_psample_init()
217 psample->rate = 100; in nsim_dev_psample_init()
218 debugfs_create_u32("rate", 0600, psample->ddir, &psample->rate); in nsim_dev_psample_init()
220 psample->group_num = 10; in nsim_dev_psample_init()
221 debugfs_create_u32("group_num", 0600, psample->ddir, in nsim_dev_psample_init()
222 &psample->group_num); in nsim_dev_psample_init()
224 psample->trunc_size = 0; in nsim_dev_psample_init()
225 debugfs_create_u32("trunc_size", 0600, psample->ddir, in nsim_dev_psample_init()
226 &psample->trunc_size); in nsim_dev_psample_init()
228 psample->in_ifindex = 1; in nsim_dev_psample_init()
229 debugfs_create_u32("in_ifindex", 0600, psample->ddir, in nsim_dev_psample_init()
230 &psample->in_ifindex); in nsim_dev_psample_init()
232 psample->out_ifindex = 2; in nsim_dev_psample_init()
233 debugfs_create_u32("out_ifindex", 0600, psample->ddir, in nsim_dev_psample_init()
234 &psample->out_ifindex); in nsim_dev_psample_init()
236 psample->out_tc = 0; in nsim_dev_psample_init()
237 debugfs_create_u16("out_tc", 0600, psample->ddir, &psample->out_tc); in nsim_dev_psample_init()
239 psample->out_tc_occ_max = 10000; in nsim_dev_psample_init()
240 debugfs_create_u64("out_tc_occ_max", 0600, psample->ddir, in nsim_dev_psample_init()
241 &psample->out_tc_occ_max); in nsim_dev_psample_init()
243 psample->latency_max = 50; in nsim_dev_psample_init()
244 debugfs_create_u64("latency_max", 0600, psample->ddir, in nsim_dev_psample_init()
245 &psample->latency_max); in nsim_dev_psample_init()
247 debugfs_create_file("enable", 0200, psample->ddir, nsim_dev, in nsim_dev_psample_init()
253 kfree(nsim_dev->psample); in nsim_dev_psample_init()
259 debugfs_remove_recursive(nsim_dev->psample->ddir); in nsim_dev_psample_exit()
260 if (nsim_dev->psample->is_active) { in nsim_dev_psample_exit()
261 cancel_delayed_work_sync(&nsim_dev->psample->psample_dw); in nsim_dev_psample_exit()
262 psample_group_put(nsim_dev->psample->group); in nsim_dev_psample_exit()
264 kfree(nsim_dev->psample); in nsim_dev_psample_exit()