1*fa79ecf8SEmilia Haligowska/* SPDX-License-Identifier: BSD-3-Clause 2*fa79ecf8SEmilia Haligowska * Copyright (C) 2023 Intel Corporation. 3*fa79ecf8SEmilia Haligowska * All rights reserved. 4*fa79ecf8SEmilia Haligowska */ 5*fa79ecf8SEmilia Haligowska 6*fa79ecf8SEmilia Haligowskapackage main 7*fa79ecf8SEmilia Haligowska 8*fa79ecf8SEmilia Haligowskaimport ( 9*fa79ecf8SEmilia Haligowska "encoding/json" 10*fa79ecf8SEmilia Haligowska "flag" 11*fa79ecf8SEmilia Haligowska "fmt" 12*fa79ecf8SEmilia Haligowska "github.com/spdk/spdk/go/rpc/client" 13*fa79ecf8SEmilia Haligowska "log" 14*fa79ecf8SEmilia Haligowska "os" 15*fa79ecf8SEmilia Haligowska) 16*fa79ecf8SEmilia Haligowska 17*fa79ecf8SEmilia Haligowskaconst ( 18*fa79ecf8SEmilia Haligowska socketAddress = "/var/tmp/spdk.sock" 19*fa79ecf8SEmilia Haligowska bDevGetBDevs = "bdev_get_bdevs" 20*fa79ecf8SEmilia Haligowska defaultBdevName = "" 21*fa79ecf8SEmilia Haligowska defaultTimeout = 0 22*fa79ecf8SEmilia Haligowska) 23*fa79ecf8SEmilia Haligowska 24*fa79ecf8SEmilia Haligowskafunc main() { 25*fa79ecf8SEmilia Haligowska 26*fa79ecf8SEmilia Haligowska //create client 27*fa79ecf8SEmilia Haligowska rpcClient, err := client.CreateClientWithJsonCodec(client.Unix, socketAddress) 28*fa79ecf8SEmilia Haligowska if err != nil { 29*fa79ecf8SEmilia Haligowska log.Fatalf("error on client creation, err: %s", err.Error()) 30*fa79ecf8SEmilia Haligowska } 31*fa79ecf8SEmilia Haligowska defer rpcClient.Close() 32*fa79ecf8SEmilia Haligowska 33*fa79ecf8SEmilia Haligowska //sends a JSON-RPC 2.0 request with "bdev_get_bdevs" method and provided params 34*fa79ecf8SEmilia Haligowska resp, err := rpcClient.Call(bDevGetBDevs, getBDevParams()) 35*fa79ecf8SEmilia Haligowska if err != nil { 36*fa79ecf8SEmilia Haligowska log.Fatalf("error on JSON-RPC call, method: %s err: %s", bDevGetBDevs, err.Error()) 37*fa79ecf8SEmilia Haligowska } 38*fa79ecf8SEmilia Haligowska 39*fa79ecf8SEmilia Haligowska result, err := json.Marshal(resp.Result) 40*fa79ecf8SEmilia Haligowska if err != nil { 41*fa79ecf8SEmilia Haligowska log.Print(fmt.Errorf("error when creating json string representation: %w", err).Error()) 42*fa79ecf8SEmilia Haligowska } 43*fa79ecf8SEmilia Haligowska 44*fa79ecf8SEmilia Haligowska fmt.Printf("%s\n", string(result)) 45*fa79ecf8SEmilia Haligowska} 46*fa79ecf8SEmilia Haligowska 47*fa79ecf8SEmilia Haligowskafunc getBDevParams() map[string]any { 48*fa79ecf8SEmilia Haligowska fs := flag.NewFlagSet("set", flag.ContinueOnError) 49*fa79ecf8SEmilia Haligowska fs.String("name", defaultBdevName, "Name of the Blockdev") 50*fa79ecf8SEmilia Haligowska fs.Int("timeout", defaultTimeout, "Time in ms to wait for the bdev to appear") 51*fa79ecf8SEmilia Haligowska 52*fa79ecf8SEmilia Haligowska err := fs.Parse(os.Args[1:]) 53*fa79ecf8SEmilia Haligowska if err != nil { 54*fa79ecf8SEmilia Haligowska log.Fatalf("%s\n", err.Error()) 55*fa79ecf8SEmilia Haligowska } 56*fa79ecf8SEmilia Haligowska 57*fa79ecf8SEmilia Haligowska paramsMap := make(map[string]any) 58*fa79ecf8SEmilia Haligowska fs.Visit(func(f *flag.Flag) { 59*fa79ecf8SEmilia Haligowska paramsMap[f.Name] = f.Value 60*fa79ecf8SEmilia Haligowska }) 61*fa79ecf8SEmilia Haligowska 62*fa79ecf8SEmilia Haligowska return paramsMap 63*fa79ecf8SEmilia Haligowska} 64