@@ -15,6 +15,7 @@ type Route struct {
1515 Proto string
1616 Family string
1717 Via string
18+ VRF string
1819}
1920
2021// Add adds new route.
@@ -37,6 +38,10 @@ func (r *Route) Add() error {
3738 cmd = append (cmd , "proto" , r .Proto )
3839 }
3940
41+ if r .VRF != "" {
42+ cmd = append (cmd , "vrf" , r .VRF )
43+ }
44+
4045 _ , err := subprocess .RunCommand ("ip" , cmd ... )
4146 if err != nil {
4247 return err
@@ -47,7 +52,15 @@ func (r *Route) Add() error {
4752
4853// Delete deletes routing table.
4954func (r * Route ) Delete () error {
50- _ , err := subprocess .RunCommand ("ip" , r .Family , "route" , "delete" , "table" , r .Table , r .Route , "dev" , r .DevName )
55+ cmd := []string {r .Family , "route" , "delete" , r .Route , "dev" , r .DevName }
56+
57+ if r .VRF != "" {
58+ cmd = append (cmd , "vrf" , r .VRF )
59+ } else if r .Table != "" {
60+ cmd = append (cmd , "table" , r .Table )
61+ }
62+
63+ _ , err := subprocess .RunCommand ("ip" , cmd ... )
5164 if err != nil {
5265 return err
5366 }
@@ -76,6 +89,10 @@ func (r *Route) Flush() error {
7689 cmd = append (cmd , "proto" , r .Proto )
7790 }
7891
92+ if r .VRF != "" {
93+ cmd = append (cmd , "vrf" , r .VRF )
94+ }
95+
7996 _ , err := subprocess .RunCommand ("ip" , cmd ... )
8097 if err != nil {
8198 return err
@@ -87,6 +104,11 @@ func (r *Route) Flush() error {
87104// Replace changes or adds new route.
88105func (r * Route ) Replace (routes []string ) error {
89106 cmd := []string {r .Family , "route" , "replace" , "dev" , r .DevName , "proto" , r .Proto }
107+
108+ if r .VRF != "" {
109+ cmd = append (cmd , "vrf" , r .VRF )
110+ }
111+
90112 cmd = append (cmd , routes ... )
91113 _ , err := subprocess .RunCommand ("ip" , cmd ... )
92114 if err != nil {
@@ -99,7 +121,14 @@ func (r *Route) Replace(routes []string) error {
99121// Show lists routes.
100122func (r * Route ) Show () ([]string , error ) {
101123 routes := []string {}
102- out , err := subprocess .RunCommand ("ip" , r .Family , "route" , "show" , "dev" , r .DevName , "proto" , r .Proto )
124+
125+ cmd := []string {r .Family , "route" , "show" , "dev" , r .DevName , "proto" , r .Proto }
126+
127+ if r .VRF != "" {
128+ cmd = append (cmd , "vrf" , r .VRF )
129+ }
130+
131+ out , err := subprocess .RunCommand ("ip" , cmd ... )
103132 if err != nil {
104133 return routes , err
105134 }
0 commit comments