Extend Iptables interface with SaveInto

This commit is contained in:
Wojciech Tyczynski
2017-05-18 11:51:07 +02:00
parent 028ac8034b
commit bcfae7e1ed
7 changed files with 69 additions and 7 deletions

View File

@@ -56,6 +56,8 @@ type Interface interface {
IsIpv6() bool
// Save calls `iptables-save` for table.
Save(table Table) ([]byte, error)
// SaveInto calls `iptables-save` for table and stores result in a given buffer.
SaveInto(table Table, buffer *bytes.Buffer) error
// Restore runs `iptables-restore` passing data through []byte.
// table is the Table to restore
// data should be formatted like the output of Save()
@@ -315,6 +317,20 @@ func (runner *runner) Save(table Table) ([]byte, error) {
return runner.exec.Command(cmdIPTablesSave, args...).CombinedOutput()
}
// SaveInto is part of Interface.
func (runner *runner) SaveInto(table Table, buffer *bytes.Buffer) error {
runner.mu.Lock()
defer runner.mu.Unlock()
// run and return
args := []string{"-t", string(table)}
glog.V(4).Infof("running iptables-save %v", args)
cmd := runner.exec.Command(cmdIPTablesSave, args...)
cmd.SetStdout(buffer)
cmd.SetStderr(buffer)
return cmd.Run()
}
// Restore is part of Interface.
func (runner *runner) Restore(table Table, data []byte, flush FlushFlag, counters RestoreCountersFlag) error {
// setup args