summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gobgp/cmd/policy.go114
1 files changed, 34 insertions, 80 deletions
diff --git a/gobgp/cmd/policy.go b/gobgp/cmd/policy.go
index 6443ba28..f56b300e 100644
--- a/gobgp/cmd/policy.go
+++ b/gobgp/cmd/policy.go
@@ -245,7 +245,7 @@ func formatPolicyExtCommunity(head bool, indent int, ecsl []*api.DefinedSet) str
return buff.String()
}
-func showAll(v string) error {
+func show(v string, args []string) error {
var typ table.DefinedType
switch v {
case CMD_PREFIX:
@@ -261,22 +261,31 @@ func showAll(v string) error {
default:
return fmt.Errorf("unknown defined type: %s", v)
}
- arg := &api.DefinedSet{
- Type: int32(typ),
- }
- stream, e := client.GetDefinedSets(context.Background(), arg)
- if e != nil {
- return e
- }
m := sets{}
- for {
- p, e := stream.Recv()
- if e == io.EOF {
- break
- } else if e != nil {
+ if len(args) > 0 {
+ arg := &api.DefinedSet{
+ Type: int32(typ),
+ Name: args[0],
+ }
+ p, e := client.GetDefinedSet(context.Background(), arg)
+ if e != nil {
return e
}
m = append(m, p)
+ } else {
+ stream, e := client.GetDefinedSets(context.Background(), arg)
+ if e != nil {
+ return e
+ }
+ for {
+ p, e := stream.Recv()
+ if e == io.EOF {
+ break
+ } else if e != nil {
+ return e
+ }
+ m = append(m, p)
+ }
}
if globalOpts.Json {
j, _ := json.Marshal(m)
@@ -284,13 +293,21 @@ func showAll(v string) error {
return nil
}
if globalOpts.Quiet {
- for _, p := range m {
- fmt.Println(p.Name)
+ if len(args) > 0 {
+ for _, p := range m[0].List {
+ fmt.Println(p)
+ }
+ for _, p := range m[0].Prefixes {
+ fmt.Printf("%s %d..%d\n", p.IpPrefix, p.MaskLengthMin, p.MaskLengthMax)
+ }
+ } else {
+ for _, p := range m {
+ fmt.Println(p.Name)
+ }
}
return nil
}
sort.Sort(m)
-
var output string
switch v {
case CMD_PREFIX:
@@ -308,62 +325,6 @@ func showAll(v string) error {
return nil
}
-func showOne(v string, args []string) error {
- var typ table.DefinedType
- switch v {
- case CMD_PREFIX:
- typ = table.DEFINED_TYPE_PREFIX
- case CMD_NEIGHBOR:
- typ = table.DEFINED_TYPE_NEIGHBOR
- case CMD_ASPATH:
- typ = table.DEFINED_TYPE_AS_PATH
- case CMD_COMMUNITY:
- typ = table.DEFINED_TYPE_COMMUNITY
- case CMD_EXTCOMMUNITY:
- typ = table.DEFINED_TYPE_EXT_COMMUNITY
- default:
- return fmt.Errorf("unknown defined type: %s", v)
- }
- arg := &api.DefinedSet{
- Type: int32(typ),
- Name: args[0],
- }
- ps, e := client.GetDefinedSet(context.Background(), arg)
- if e != nil {
- return e
- }
- if globalOpts.Json {
- j, _ := json.Marshal(ps)
- fmt.Println(string(j))
- return nil
- }
- if globalOpts.Quiet {
- for _, p := range ps.List {
- fmt.Println(p)
- }
- for _, p := range ps.Prefixes {
- fmt.Printf("%s %d..%d\n", p.IpPrefix, p.MaskLengthMin, p.MaskLengthMax)
- }
- return nil
- }
- var output string
- m := []*api.DefinedSet{ps}
- switch v {
- case CMD_PREFIX:
- output = formatPolicyPrefix(true, 0, m)
- case CMD_NEIGHBOR:
- output = formatPolicyNeighbor(true, 0, m)
- case CMD_ASPATH:
- output = formatPolicyAsPath(true, 0, m)
- case CMD_COMMUNITY:
- output = formatPolicyCommunity(true, 0, m)
- case CMD_EXTCOMMUNITY:
- output = formatPolicyExtCommunity(true, 0, m)
- }
- fmt.Print(output)
- return nil
-}
-
func parsePrefixSet(eArgs []string) (*api.DefinedSet, error) {
_, ipNet, e := net.ParseCIDR(eArgs[1])
if e != nil {
@@ -1319,14 +1280,7 @@ func NewPolicyCmd() *cobra.Command {
cmd := &cobra.Command{
Use: v,
Run: func(cmd *cobra.Command, args []string) {
- var err error
- if len(args) == 0 {
- err = showAll(cmd.Use)
- } else {
- err = showOne(cmd.Use, args)
- }
-
- if err != nil {
+ if err := show(cmd.Use, args); err != nil {
fmt.Println(err)
}
},