()
| 181 | } |
| 182 | |
| 183 | func (s *bfdServer) loop() { |
| 184 | defer s.shutdownWait.Done() |
| 185 | |
| 186 | for { |
| 187 | select { |
| 188 | case <-s.eventStartStop.C: |
| 189 | success := true |
| 190 | |
| 191 | s.peersMutex.RLock() |
| 192 | peersLen := len(s.peers) |
| 193 | s.peersMutex.RUnlock() |
| 194 | |
| 195 | if peersLen > 0 { |
| 196 | success = s.start() |
| 197 | } else { |
| 198 | s.stop() |
| 199 | } |
| 200 | |
| 201 | if success { |
| 202 | s.eventStartStop.Stop() |
| 203 | } |
| 204 | case ev := <-s.eventConfig: |
| 205 | s.config = ev |
| 206 | case ev := <-s.eventPeerUpdate: |
| 207 | if ev.isAdd { |
| 208 | s.addBfdPeer(ev.peerAddress, ev.config, ev.bindInterface) |
| 209 | } else { |
| 210 | s.deleteBfdPeer(ev.peerAddress) |
| 211 | } |
| 212 | |
| 213 | s.eventStartStop.Reset(time.Second) |
| 214 | case <-s.eventShutdown: |
| 215 | s.shutdown() |
| 216 | return |
| 217 | } |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | func (s *bfdServer) start() bool { |
| 222 | if s.udpServer == nil { |
no test coverage detected