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