func (fastdp *FastDatapath) deleteFlows() error { fastdp.deleteFlowsCount++ flows, err := fastdp.dp.EnumerateFlows() if err != nil { return err } for _, flow := range flows { err = fastdp.dp.DeleteFlow(flow.FlowKeys) if err != nil && !odp.IsNoSuchFlowError(err) { return err } } return nil }
func (fastdp *FastDatapath) expireFlows() { lock := fastdp.startLock() defer lock.unlock() flows, err := fastdp.dp.EnumerateFlows() checkWarn(err) for _, flow := range flows { if flow.Used == 0 { log.Debug("Expiring flow ", flow.FlowSpec) err = fastdp.dp.DeleteFlow(flow.FlowKeys) } else { fastdp.touchFlow(flow.FlowKeys, &lock) err = fastdp.dp.ClearFlow(flow.FlowSpec) } if err != nil && !odp.IsNoSuchFlowError(err) { log.Warn(err) } } }
func deleteFlow(f Flags) bool { dpif, err := odp.NewDpif() if err != nil { return printErr("%s", err) } defer dpif.Close() dp, flow, ok := flagsToFlowSpec(f, dpif) if !ok { return false } err = dp.DeleteFlow(flow.FlowKeys) if err != nil { if odp.IsNoSuchFlowError(err) { return printErr("No such flow") } else { return printErr("%s", err) } } return true }