Linux Audio

Check our new training course

Loading...
v6.2
  1// SPDX-License-Identifier: GPL-2.0-only
  2/* Copyright (c) 2016 Facebook
 
 
 
 
  3 */
  4#include <linux/unistd.h>
  5#include <linux/bpf.h>
  6
  7#include <stdio.h>
  8#include <stdint.h>
  9#include <unistd.h>
 10#include <string.h>
 11#include <errno.h>
 12#include <fcntl.h>
 13
 14#include <bpf/bpf.h>
 15
 16static void usage(void)
 17{
 18	printf("Usage: test_cgrp2_array_pin [...]\n");
 19	printf("       -F <file>   File to pin an BPF cgroup array\n");
 20	printf("       -U <file>   Update an already pinned BPF cgroup array\n");
 21	printf("       -v <value>  Full path of the cgroup2\n");
 22	printf("       -h          Display this help\n");
 23}
 24
 25int main(int argc, char **argv)
 26{
 27	const char *pinned_file = NULL, *cg2 = NULL;
 28	int create_array = 1;
 29	int array_key = 0;
 30	int array_fd = -1;
 31	int cg2_fd = -1;
 32	int ret = -1;
 33	int opt;
 34
 35	while ((opt = getopt(argc, argv, "F:U:v:")) != -1) {
 36		switch (opt) {
 37		/* General args */
 38		case 'F':
 39			pinned_file = optarg;
 40			break;
 41		case 'U':
 42			pinned_file = optarg;
 43			create_array = 0;
 44			break;
 45		case 'v':
 46			cg2 = optarg;
 47			break;
 48		default:
 49			usage();
 50			goto out;
 51		}
 52	}
 53
 54	if (!cg2 || !pinned_file) {
 55		usage();
 56		goto out;
 57	}
 58
 59	cg2_fd = open(cg2, O_RDONLY);
 60	if (cg2_fd < 0) {
 61		fprintf(stderr, "open(%s,...): %s(%d)\n",
 62			cg2, strerror(errno), errno);
 63		goto out;
 64	}
 65
 66	if (create_array) {
 67		array_fd = bpf_map_create(BPF_MAP_TYPE_CGROUP_ARRAY, NULL,
 68					  sizeof(uint32_t), sizeof(uint32_t),
 69					  1, NULL);
 70		if (array_fd < 0) {
 71			fprintf(stderr,
 72				"bpf_create_map(BPF_MAP_TYPE_CGROUP_ARRAY,...): %s(%d)\n",
 73				strerror(errno), errno);
 74			goto out;
 75		}
 76	} else {
 77		array_fd = bpf_obj_get(pinned_file);
 78		if (array_fd < 0) {
 79			fprintf(stderr, "bpf_obj_get(%s): %s(%d)\n",
 80				pinned_file, strerror(errno), errno);
 81			goto out;
 82		}
 83	}
 84
 85	ret = bpf_map_update_elem(array_fd, &array_key, &cg2_fd, 0);
 86	if (ret) {
 87		perror("bpf_map_update_elem");
 88		goto out;
 89	}
 90
 91	if (create_array) {
 92		ret = bpf_obj_pin(array_fd, pinned_file);
 93		if (ret) {
 94			fprintf(stderr, "bpf_obj_pin(..., %s): %s(%d)\n",
 95				pinned_file, strerror(errno), errno);
 96			goto out;
 97		}
 98	}
 99
100out:
101	if (array_fd != -1)
102		close(array_fd);
103	if (cg2_fd != -1)
104		close(cg2_fd);
105	return ret;
106}
v4.17
 
  1/* Copyright (c) 2016 Facebook
  2 *
  3 * This program is free software; you can redistribute it and/or
  4 * modify it under the terms of version 2 of the GNU General Public
  5 * License as published by the Free Software Foundation.
  6 */
  7#include <linux/unistd.h>
  8#include <linux/bpf.h>
  9
 10#include <stdio.h>
 11#include <stdint.h>
 12#include <unistd.h>
 13#include <string.h>
 14#include <errno.h>
 15#include <fcntl.h>
 16
 17#include "libbpf.h"
 18
 19static void usage(void)
 20{
 21	printf("Usage: test_cgrp2_array_pin [...]\n");
 22	printf("       -F <file>   File to pin an BPF cgroup array\n");
 23	printf("       -U <file>   Update an already pinned BPF cgroup array\n");
 24	printf("       -v <value>  Full path of the cgroup2\n");
 25	printf("       -h          Display this help\n");
 26}
 27
 28int main(int argc, char **argv)
 29{
 30	const char *pinned_file = NULL, *cg2 = NULL;
 31	int create_array = 1;
 32	int array_key = 0;
 33	int array_fd = -1;
 34	int cg2_fd = -1;
 35	int ret = -1;
 36	int opt;
 37
 38	while ((opt = getopt(argc, argv, "F:U:v:")) != -1) {
 39		switch (opt) {
 40		/* General args */
 41		case 'F':
 42			pinned_file = optarg;
 43			break;
 44		case 'U':
 45			pinned_file = optarg;
 46			create_array = 0;
 47			break;
 48		case 'v':
 49			cg2 = optarg;
 50			break;
 51		default:
 52			usage();
 53			goto out;
 54		}
 55	}
 56
 57	if (!cg2 || !pinned_file) {
 58		usage();
 59		goto out;
 60	}
 61
 62	cg2_fd = open(cg2, O_RDONLY);
 63	if (cg2_fd < 0) {
 64		fprintf(stderr, "open(%s,...): %s(%d)\n",
 65			cg2, strerror(errno), errno);
 66		goto out;
 67	}
 68
 69	if (create_array) {
 70		array_fd = bpf_create_map(BPF_MAP_TYPE_CGROUP_ARRAY,
 71					  sizeof(uint32_t), sizeof(uint32_t),
 72					  1, 0);
 73		if (array_fd < 0) {
 74			fprintf(stderr,
 75				"bpf_create_map(BPF_MAP_TYPE_CGROUP_ARRAY,...): %s(%d)\n",
 76				strerror(errno), errno);
 77			goto out;
 78		}
 79	} else {
 80		array_fd = bpf_obj_get(pinned_file);
 81		if (array_fd < 0) {
 82			fprintf(stderr, "bpf_obj_get(%s): %s(%d)\n",
 83				pinned_file, strerror(errno), errno);
 84			goto out;
 85		}
 86	}
 87
 88	ret = bpf_map_update_elem(array_fd, &array_key, &cg2_fd, 0);
 89	if (ret) {
 90		perror("bpf_map_update_elem");
 91		goto out;
 92	}
 93
 94	if (create_array) {
 95		ret = bpf_obj_pin(array_fd, pinned_file);
 96		if (ret) {
 97			fprintf(stderr, "bpf_obj_pin(..., %s): %s(%d)\n",
 98				pinned_file, strerror(errno), errno);
 99			goto out;
100		}
101	}
102
103out:
104	if (array_fd != -1)
105		close(array_fd);
106	if (cg2_fd != -1)
107		close(cg2_fd);
108	return ret;
109}