github.com/cilium/cilium@v1.16.2/tools/alignchecker/main.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  
    10  	datapathchecker "github.com/cilium/cilium/pkg/datapath/alignchecker"
    11  	monitorchecker "github.com/cilium/cilium/pkg/monitor/alignchecker"
    12  )
    13  
    14  func main() {
    15  	if len(os.Args) != 2 {
    16  		fmt.Fprintf(os.Stderr, "usage: %s <path>\n", os.Args[0])
    17  		os.Exit(1)
    18  	}
    19  
    20  	bpfObjPath := os.Args[1]
    21  	if _, err := os.Stat(bpfObjPath); err != nil {
    22  		fmt.Fprintf(os.Stderr, "Cannot check alignment against %s: %s\n", bpfObjPath, err)
    23  		os.Exit(1)
    24  	}
    25  	if err := datapathchecker.CheckStructAlignments(bpfObjPath); err != nil {
    26  		fmt.Fprintf(os.Stderr, "C and Go structs alignment check in datapath failed: %s\n", err)
    27  		os.Exit(1)
    28  	}
    29  	if err := monitorchecker.CheckStructAlignments(bpfObjPath); err != nil {
    30  		fmt.Fprintf(os.Stderr, "C and Go structs alignment check in monitor failed: %s\n", err)
    31  		os.Exit(1)
    32  	}
    33  	fmt.Fprintf(os.Stdout, "OK\n")
    34  }