1package cidr 2 3import ( 4 "fmt" 5 "net" 6 7 "github.com/zclconf/go-cty/cty" 8 "github.com/zclconf/go-cty/cty/function" 9) 10 11// NetmaskFunc is a function that converts an IPv4 address prefix given in CIDR 12// notation into a subnet mask address. 13var NetmaskFunc = function.New(&function.Spec{ 14 Params: []function.Parameter{ 15 { 16 Name: "prefix", 17 Type: cty.String, 18 }, 19 }, 20 Type: function.StaticReturnType(cty.String), 21 Impl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) { 22 _, network, err := net.ParseCIDR(args[0].AsString()) 23 if err != nil { 24 return cty.UnknownVal(cty.String), fmt.Errorf("invalid CIDR expression: %s", err) 25 } 26 27 return cty.StringVal(net.IP(network.Mask).String()), nil 28 }, 29}) 30 31// Netmask converts an IPv4 address prefix given in CIDR notation into a subnet mask address. 32func Netmask(prefix cty.Value) (cty.Value, error) { 33 return NetmaskFunc.Call([]cty.Value{prefix}) 34} 35