simple .o parser and loader using BPF syscall. .o is a standard ELF generated by LLVM backend It parses elf file compiled by llvm .c->.o - parses 'maps' section and creates maps via BPF syscall - parses 'license' section and passes it to syscall - parses elf relocations for BPF maps and adjusts BPF_LD_IMM64 insns by storing map_fd into insn->imm and marking such insns as BPF_PSEUDO_MAP_FD - loads eBPF programs via BPF syscall One ELF file can contain multiple BPF programs. int load_bpf_file(char *path); populates prog_fd[] and map_fd[] with FDs received from bpf syscall bpf_helpers.h - helper functions available to eBPF programs written in C Signed-off-by: Alexei Starovoitov <ast@plumgrid.com> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			24 lines
		
	
	
	
		
			694 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
	
		
			694 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __BPF_LOAD_H
 | 
						|
#define __BPF_LOAD_H
 | 
						|
 | 
						|
#define MAX_MAPS 32
 | 
						|
#define MAX_PROGS 32
 | 
						|
 | 
						|
extern int map_fd[MAX_MAPS];
 | 
						|
extern int prog_fd[MAX_PROGS];
 | 
						|
 | 
						|
/* parses elf file compiled by llvm .c->.o
 | 
						|
 * . parses 'maps' section and creates maps via BPF syscall
 | 
						|
 * . parses 'license' section and passes it to syscall
 | 
						|
 * . parses elf relocations for BPF maps and adjusts BPF_LD_IMM64 insns by
 | 
						|
 *   storing map_fd into insn->imm and marking such insns as BPF_PSEUDO_MAP_FD
 | 
						|
 * . loads eBPF programs via BPF syscall
 | 
						|
 *
 | 
						|
 * One ELF file can contain multiple BPF programs which will be loaded
 | 
						|
 * and their FDs stored stored in prog_fd array
 | 
						|
 *
 | 
						|
 * returns zero on success
 | 
						|
 */
 | 
						|
int load_bpf_file(char *path);
 | 
						|
 | 
						|
#endif
 |