// NewFirewaller returns a new Firewaller. func NewFirewaller(st *state.State) *Firewaller { fw := &Firewaller{ st: st, environWatcher: st.WatchEnvironConfig(), machinesWatcher: st.WatchMachines(), machineds: make(map[string]*machineData), unitsChange: make(chan *unitsChange), unitds: make(map[string]*unitData), portsChange: make(chan *portsChange), serviceds: make(map[string]*serviceData), exposedChange: make(chan *exposedChange), } go func() { defer fw.tomb.Done() fw.tomb.Kill(fw.loop()) }() return fw }