Esempio n. 1
0
func generateCurrentOpenFlow(dk docker.Client) (OFRuleSlice, error) {
	args := "ovs-ofctl dump-flows " + quiltBridge
	stdout, _, err := dk.ExecVerbose(
		supervisor.Ovsvswitchd, strings.Split(args, " ")...)

	if err != nil {
		return nil, fmt.Errorf("failed to list OpenFlow flows: %s",
			string(stdout))
	}

	scanner := bufio.NewScanner(bytes.NewReader(stdout))
	var flows OFRuleSlice

	// The first line isn't a flow, so skip it.
	scanner.Scan()

	for scanner.Scan() {
		line := strings.TrimSpace(scanner.Text())

		flow, err := makeOFRule(line)

		if err != nil {
			return nil, fmt.Errorf("failed to make OpenFlow rule: %s", err)
		}

		flows = append(flows, flow)
	}

	if err := scanner.Err(); err != nil {
		return nil, fmt.Errorf("scanner error while getting OpenFlow flows: %s",
			err)
	}

	return flows, nil
}