<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-nmrg-llm-benchmark-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="NetConfBench">A Framework to Evaluate LLM Agents for Network Configuration</title>
    <seriesInfo name="Internet-Draft" value="draft-cui-nmrg-llm-benchmark-00"/>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <author initials="C." surname="Liu" fullname="Chang Liu">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>liuchang23@mails.tsinghua.edu.cn</email>
      </address>
    </author>
    <author initials="X." surname="Xie" fullname="Xiaohui Xie">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>xiexiaohui@tsinghua.edu.cn</email>
      </address>
    </author>
    <author initials="C." surname="Du" fullname="Chenguang Du">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>ducg@zgclab.edu.cn</email>
      </address>
    </author>
    <date year="2025" month="June" day="30"/>
    <area>IRTF</area>
    <workgroup>Network Management Research Group</workgroup>
    <keyword>Large Language Model</keyword>
    <keyword>Network Configuration</keyword>
    <keyword>Benchmark</keyword>
    <abstract>
      <?line 161?>

<t>This document specifies an evaluation framework and related definitions for intent-driven network configuration using Large Language Model(LLM)-based agents. The framework combines an emulator-based interactive environment, a suite of representative tasks, and multi-dimensional metrics to assess reasoning quality, command accuracy, and functional correctness.  The framework aims to enable reproducible, comprehensive, and fair comparisons among LLM-driven network configuration approaches.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://example.com/LATEST"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-cui-nmrg-llm-benchmark/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:WG@example.com"/>),
        which is archived at <eref target="https://example.com/WG"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/USER/REPO"/>.</t>
    </note>
  </front>
  <middle>
    <?line 166?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Network configuration is fundamental to ensuring network stability, scalability, and conformance with intended design behavior. Effective configuration requires not only a comprehensive understanding of network technologies but also advanced capabilities for interpreting complex topologies, analyzing dependencies, and specifying parameters accurately.  Traditional automation approaches such as Ansible playbooks<xref target="A2023"/>, NETCONF<xref target="RFC6241"/>/YANG models<xref target="RFC7950"/>, or program-synthesis methods-either demand extensive manual scripting or are limited to narrow problem domains<xref target="Kreutz2014"/>.  In parallel, Large Language Models (LLMs) have demonstrated the ability to interpret natural-language instructions and generate device-specific commands, showing promise for intent-driven automation in networking.  However, existing work remains fragmented and lacks a standardized way to measure whether an LLM can truly operate as an autonomous agent in realistic, multi-step configuration scenarios.</t>
      <t>Despite encouraging results in individual subtasks, most evaluations<xref target="Wang2024NetConfEval"/> rely on static datasets and ad hoc metrics that do not reflect real-world complexity.  As a result:
- There is no common benchmark suite covering diverse configuration domains (routing, QoS, security) with clearly defined intents, topologies, and ground truth.
- Existing tests seldom involve interactive environments that emulate vendor-specific device behavior or provide runtime feedback on command execution.
- Evaluation metrics are often limited to simple syntactic checks or isolated command validation, failing to capture whether the intended network behavior is actually achieved.</t>
      <t>Consequently, it is difficult to compare different LLM approaches or to identify gaps in reasoning, context-sensitivity, and error-correction capabilities<xref target="Long2025"/><xref target="Liu2024"/><xref target="Fuad2024"/><xref target="Lira2024"/>.  To address these shortcomings, this document introduce <strong>NetConfBench</strong>, a holistic framework that provides:
1. An emulatorbased environment (built on GNS3) to simulate realistic device interactions.
2. A benchmark suite of forty tasks spanning multiple domains, each defined by intent, topology, initial state, and expert-validated ground truth.
3. Multidimensional metrics-<em>reasoning score</em>, <em>command score</em>, and <em>testcase score</em>-that evaluate an agent's internal reasoning coherence, semantic correctness of generated commands, and functional outcomes in the emulated network.</t>
      <t>NetConfBench aims to enable reproducible, comprehensive comparisons among singleturn LLMs, ReActstyle multiturn agents, and knowledge-augmented variants, guiding future research toward truly autonomous, intent-driven network configuration.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>For clarity within this document, the following terms and abbreviations
are defined:</t>
      <ul spacing="normal">
        <li>
          <t>Agent: A software component powered by an LLM that consumes a task intent, interacts with a network environment, and issues configuration commands autonomously.</t>
        </li>
        <li>
          <t>Configuration Command: A device-specific instruction (e.g., a Cisco IOS CLI line or a Juniper Junos set statement) sent by the agent to a network device.</t>
        </li>
        <li>
          <t>Environment: An emulated or real network instance that exposes device status, topology information, and feedback on applied commands.</t>
        </li>
        <li>
          <t>Intent: A high-level specification of desired network behavior or objective, expressed in natural language or a structured format defined in this document.</t>
        </li>
        <li>
          <t>Task: A single evaluation unit defined by (1) a scenario category, (2) an environment topology, (3) initial device configurations, and (4) an intent. The agent is evaluated on its ability to fulfill the intent in the given environment.</t>
        </li>
        <li>
          <t>Testcase: A concrete, executable set of verification steps (e.g., ping tests, traffic-flow validation, policy checks) used to assert whether the agent's final configuration satisfies the intent.</t>
        </li>
      </ul>
    </section>
    <section anchor="framework-overview">
      <name>Framework Overview</name>
      <artwork><![CDATA[
+------------------+
|    Task Datase   |                     +-------------------------+
|+----------------+|    +-----------+    |        Evaluator        |
||Network Intents ||(1) |           |(4) |+----------+ +----------+|
||+--------+      |---->| LLM Agent |<--->|Reasoning | |Grnd Truth||
|||Routing |      ||    |           |    ||Trajectory| |Reasoning ||
|||Policy  | +---+||    +-----------+    |+----------+ +----------+|
||+--------+ |QoS|||          |          |     \             /     |
||+--------+ +---+||          |          |      Rouge/Cos. Sim.    |
|||Security|      ||         (3)         |                         |
||+--------+      ||          |          |+----------+ +----------+|
|+----------------+|          |       (5)|| Final    | |Grnd Truth||
|+----------------+|          |        +->| Configs  | |Configs   ||
||Network Topology||    +-----------+  | |+----------+ +----------+|
||+-----+ +-----+ ||(2) |Environment|  | |     \             /     |
|||Nodes| |Links| |---->|           |-+  |    Precision/Recall     |
||+-----+ +-----+ ||    | R2 --- R1 |    |                         |
|+----------------+|    | |(GNS3)|  |(6) | +---------------------+ |
|                  |    | R3 --- R4 |<-->| |     Testcases       | |
|+----------------+|(2) |           |    | +---------------------+ |
||Initial Configs |---->| Emulator- |    |            |            |
|+----------------+|    |  based    |    |        Pass Rate        |
+------------------+    +-----------+    +-------------------------+

Legend:
(1)Task Assignment             (2)Environment Setup
(3)Interactive Task Execution  (4)Reasoning Trajectory Export
(5)Final Configuration Export  (6)Testcase Execution

Figure 1: The NetConfBench Framework
]]></artwork>
      <t>The proposed framework is shown in Figure 1. The flow begins with a <strong>Task Dataset</strong> defining network intents and topologies. The <strong>LLM Agent</strong> perceives the environment, reasons about required actions, and applies configuration commands. The <strong>Environment</strong> simulates or controls real devices, providing feedback for each action. Finally, the <strong>Evaluator</strong> compares the agent's outputs against ground-truth configurations and reasoning, computing scores for accuracy and completion.</t>
      <section anchor="components">
        <name>Components</name>
        <t>NetConfBench consists of four key components:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Task Dataset</strong><br/>
A repository of forty configuration tasks, each defined as a JSON object with:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Intent</strong>: One or more natural language instructions.</t>
              </li>
              <li>
                <t><strong>Topology</strong>: A list of node names and link definitions.</t>
              </li>
              <li>
                <t><strong>Initial Configuration</strong>: The initial configuration state of all nodes.</t>
              </li>
              <li>
                <t><strong>Ground Truth Configuration</strong>: Expert-validated CLI commands that achieve the intent.</t>
              </li>
              <li>
                <t><strong>Ground Truth Reasoning</strong>: A narrative describing step-by-step logic used to derive the commands.</t>
              </li>
              <li>
                <t><strong>Testcases</strong>: A set of verification procedures (e.g., <em>show</em>, <em>ping</em>, <em>ACL</em> checks) that confirm functional intent satisfaction.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Emulator Environment</strong><br/>
Built on GNS3, this component launches official vendor images for routers and switches, replicating realistic CLI behavior.  Key interfaces include:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Agent-Network Interface (ANI)</strong>: 
 Based on the key stages commonly involved in intent-driven network configuration, we design an Agent-Network Interface to facilitate structured interactions between the LLM agent and the emulated network environment. This interface supports four core actions: <tt>get-topology</tt>, <tt>get-running-cfg</tt>, <tt>update-cfg</tt>, and <tt>execute-cmd</tt>.
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>get-topology</tt>: provides this information in a
format interpretable by the LLM.</t>
                  </li>
                  <li>
                    <t><tt>get-running-cfg</tt>: enables the agent to obtain the active configurations of specified devices, providing essential context for planning.
subsequent updates.</t>
                  </li>
                  <li>
                    <t><tt>update-cfg</tt>: allows the agent to apply new configuration commands and provides detailed feedback on their execution, including whether each command was accepted or resulted in any errors.</t>
                  </li>
                  <li>
                    <t><tt>execute-cmd</tt>: accepts a device name and a command string as parameters and returns the resulting output.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><strong>Task Evaluation Interface</strong>: To enable reliable and objective assessment of the LLM agent's configuration behavior, the environment provides a Task Evaluation Interface that allows the evaluation module to access relevant execution results. Specifically, this interface supports:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><strong>Exporting the final configurations of all devices</strong>: This allows for direct comparison with ground truth configurations to evaluate the correctness and completeness of the agent's output.</t>
                  </li>
                  <li>
                    <t><strong>Executing a set of predefined testcases</strong>: These testcases are designed to verify whether the resulting network behavior accurately reflects the intended configuration objectives, as defined by the network intent.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>LLM Agent</strong><br/>
A modular component that can be implemented with any LLM (open-source or closed-source).  It interacts with the emulator via the <strong>Agent-Network Interface</strong> (ANI), issuing queries such as <tt>get-topology</tt>, <tt>get-running-cfg</tt>, <tt>update-cfg</tt>, and <tt>execute-cmd</tt>.  Agents may use:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Single-Turn Generation</strong>: The entire reasoning and command generation in one pass.</t>
              </li>
              <li>
                <t><strong>ReAct-Style Multi-Turn Interaction</strong>: Interleaved reasoning and actions, with runtime feedback guiding subsequent steps.</t>
              </li>
              <li>
                <t><strong>External Knowledge Retrieval</strong>: (Optional) Queries to a command manual to resolve vendor-specific syntax.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Evaluator</strong><br/>
Computes three core metrics for each task:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Reasoning Score (<tt>S_reasoning</tt>)</strong>:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Embedding-based cosine similarity between the agent's reasoning trace and the ground truth reasoning.</t>
                  </li>
                  <li>
                    <t>Ranges from 0 to 1.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><strong>Command Score (<tt>S_command</tt>)</strong>:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Hierarchical diff of final vs. initial router configurations (using Python's <tt>ciscoconfparse</tt>).</t>
                  </li>
                  <li>
                    <t>Wildcard matching ignores non-essential identifiers (e.g., ACL numbers).</t>
                  </li>
                  <li>
                    <t>Compute precision = (correctly generated commands / total generated) and recall = (correctly generated / ground truth commands).</t>
                  </li>
                  <li>
                    <t><tt>S_command</tt> is the harmonic mean of precision and recall, ranging from 0 to 1.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><strong>Testcase Score (<tt>S_testcase</tt>)</strong>:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Portion of testcases passed in the emulated environment.</t>
                  </li>
                  <li>
                    <t>Fine-grained sub-intents (per device) each correspond to a testcase.</t>
                  </li>
                  <li>
                    <t><tt>S_testcase</tt> is the testcase pass rate, defined as the proportion of passed testcases among all defined testcases.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="workflow">
        <name>Workflow</name>
        <t>The evaluation workflow for each task proceeds through six stages:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Task Assignment</strong><br/>
NetConfBench selects a task from the JSON dataset and provides only the high-level intent(s) to the LLM agent.</t>
          </li>
          <li>
            <t><strong>Environment Setup</strong><br/>
The framework instantiates a GNS3 topology based on the task's <tt>topology</tt> and applies the <tt>startup-config</tt> to each device.  Once the emulated network reaches a stable state, control transfers to the agent.</t>
          </li>
          <li>
            <t><strong>Interactive Execution</strong><br/>
The LLM agent receives the partial prompt containing:
            </t>
            <ul spacing="normal">
              <li>
                <t>The API specification for <tt>get-topology</tt>, <tt>get-running-cfg</tt>, <tt>update-cfg</tt>, and <tt>execute-cmd</tt>.</t>
              </li>
              <li>
                <t>The natural language intent.</t>
              </li>
              <li>
                <t>(Optionally) Device model/version hints.<br/>
The agent issues a sequence of API calls; for single-turn agents, it outputs reasoning followed by a batch of CLI commands.  For multi-turn agents, it alternates reasoning traces and API calls.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Reasoning Trajectory Export</strong><br/>
After execution completes (agent signals "task done" or after a predefined command budget), NetConfBench captures the entire reasoning log:
            </t>
            <ul spacing="normal">
              <li>
                <t>For single-turn: the reasoning paragraph embedded in the LLM's output.</t>
              </li>
              <li>
                <t>For ReAct: an auxiliary summarization LLM condenses the interleaved reasoning and actions into a single coherent trace.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Final Configuration Export</strong><br/>
The framework uses the Task Evaluation Interface to extract the final running configs from each device.</t>
          </li>
          <li>
            <t><strong>Testcase Execution and Scoring</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Command Score:</strong> Hierarchical diff against ground truth commands.</t>
              </li>
              <li>
                <t><strong>Testcase Score:</strong> Execute each testcase in sequence; record pass/fail.</t>
              </li>
              <li>
                <t><strong>Reasoning Score:</strong> Compute embedding similarity between the agent's reasoning trace and ground truth reasoning.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>The final per-task score is typically reported as a tuple <tt>(S_reasoning, S_command, S_testcase)</tt>.  Aggregate results across the forty tasks enable comparisons among LLMs and interaction strategies.</t>
      </section>
    </section>
    <section anchor="data-model">
      <name>Data Model</name>
      <t>This section specifies the JSON schemas and interface conventions used to represent tasks and to enable structured interaction between the LLM agent and the emulated environment.</t>
      <section anchor="task-definition-schema">
        <name>Task Definition Schema</name>
        <t>Each configuration task is defined as a JSON object with the following structure:</t>
        <sourcecode type="json"><![CDATA[
{
  "task_name": "Static Routing",
  "intents": [
    "NewYork: create a static route pointing to the Loopback0 on
    Washington, traffic should pass the 192.168.1.0 network.",
    "NewYork: create a backup static route pointing to the Loopback0
    on Washington, administrative distance should be 100."
    ...
  ],
  "topology": {
    "nodes": ["NewYork", "Washington"],
    "links": [
      "NewYork S0/0 <-> Washington S0/0 ", 
      "NewYork S0/1 <-> Washington S0/1"
    ]
  },
  "startup_configs": {
    "NewYork": "!\r\nversion 12.4\r\nservice timestamps
    debug datetime msec\r\n...", 
    "Washington": "!\r\nversion 12.4\r\nservice timestamps
    debug datetime msec\r\n...",
  },
  "ground_truth_configs": {
    "NewYork": [
      "ip route 2.2.2.0 255.255.255.252 192.168.1.2",
      "ip route 2.2.2.0 255.255.255.252 192.168.2.2 100"
    ],
    ...
  },
  "ground_truth_reasoning": "NewYork to Washington Loopback 
  (primary path): add a static route for Washington's 
  Loopback0 network (2.2.2.0/30) pointing to the 
  next-hop 192.168.1.2...",
  "testcases": [
    {
      "name": "Static Route from NewYork to Washington",
      "expected_result": {
        "protocol": "static", 
        "next_hop": "192.168.1.2"
      }
    },
    ...
  ]
}
]]></sourcecode>
      </section>
      <section anchor="agent-network-interface-ani">
        <name>Agent-Network Interface (ANI)</name>
        <t>The Agent-Network Interface defines the minimal API primitives necessary for intent-driven configuration.  Each primitive uses JSON-RPC style request/response with the following methods:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong><tt>get-topology</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "get-topology",
  "params": {
    "devices": ["R1", "R2", ...]
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "topology": {
    "nodes": [...],
    "links": [...]
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Description</strong>: Returns the full topology for the specified subset of devices.  If <tt>"devices"</tt> is empty or omitted, returns the entire topology.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong><tt>get-running-cfg</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "get-running-cfg",
  "params": {
    "device": "R1"
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "running_config": "
   interface Gig0/0
   ip address 192.168.1.1 255.255.255.255
   ...
  "
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Description</strong>: Retrieves the active (running) configuration of the specified device.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong><tt>update-cfg</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "update-cfg",
  "params": {
    "device": "R1",
    "commands": [
      "configure terminal",
      "ip route 2.2.2.0 255.255.255.252 192.168.1.2"
    ]
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "results": [
    { "command": "configure terminal", "status": "success" },
    { 
    "command": "ip route 2.2.2.0 255.255.255.252 192.168.1.2", 
    "status": "success" }
  ]
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Description</strong>: Applies a sequence of CLI commands to the specified device.  Returns per-command status and any error messages.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong><tt>execute-cmd</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "execute-cmd",
  "params": {
    "device": "R1",
    "command": "show ip route 2.2.2.0 255.255.255.252"
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "output": "S 2.2.2.0/30 [1/0] via 192.168.1.2"
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Description</strong>: Executes a read-only command on the specified device and returns its output.  Must not alter device state.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="task-evaluation-interface">
        <name>Task Evaluation Interface</name>
        <t>After the agent signals completion, the framework uses the Task Evaluation Interface to retrieve results:</t>
        <ul spacing="normal">
          <li>
            <t><strong><tt>export-final-cfg</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "export-final-cfg"
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "configs": {
    "R1": "!\nversion 15.2\n...",
    "R2": "!\nversion 15.2\n..."
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Description</strong>: Returns the final running-configuration of each device.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong><tt>run-testcases</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "run-testcases",
  "params": {
    "testcases": [
      {
        "device": "R1",
        "commands": ["show ip route 2.2.2.0 255.255.255.252"],
        "expected_output": "S 2.2.2.0/30 [1/0] via 192.168.1.2"
      },
      ...
    ]
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "results": [
    { 
      "name": "Verify primary static route on R1", 
      "status": "pass" 
    },
    { 
      "name": "Verify backup static route on R1", 
      "status": "fail" 
    }
  ]
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Description</strong>: Executes each verification command sequence on the appropriate device and compares actual output against <tt>expected_output</tt> (regular expression).  Returns pass/fail for each testcase.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>LLM-driven network configuration introduces risks such as unintended or malicious commands, emulator vulnerabilities, and data exposure; to mitigate these, NetConfBench should enforce strict input validation (e.g., YANG/XML schema checks), run emulated devices in isolated sandboxes with limited privileges, encrypt and restrict access to task definitions and logs, employ human-in-the-loop approval for generated configurations, and use curated prompt templates and fine-tuning to reduce LLM hallucinations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="Kreutz2014">
          <front>
            <title>Software-defined networking: A comprehensive survey</title>
            <author initials="D." surname="Kreutz" fullname="Diego Kreutz">
              <organization/>
            </author>
            <author initials="F. M. V." surname="Ramos" fullname="Fernando M. V. Ramos">
              <organization/>
            </author>
            <author initials="P. E." surname="Verissimo" fullname="Paulo Esteves Verissimo">
              <organization/>
            </author>
            <author initials="C. E." surname="Rothenberg" fullname="Christian Esteve Rothenberg">
              <organization/>
            </author>
            <author initials="S." surname="Azodolmolky" fullname="Siamak Azodolmolky">
              <organization/>
            </author>
            <author initials="S." surname="Uhlig" fullname="Steve Uhlig">
              <organization/>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="A2023">
          <front>
            <title>Ansible</title>
            <author initials="R." surname="Hat" fullname="Red Hat">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Long2025">
          <front>
            <title>A Survey on Intelligent Network Operations and Performance Optimization Based on Large Language Models</title>
            <author initials="S." surname="Long" fullname="Sifan Long">
              <organization/>
            </author>
            <author initials="J." surname="Tan" fullname="Jingjing Tan">
              <organization/>
            </author>
            <author initials="B." surname="Mao" fullname="Bomin Mao">
              <organization/>
            </author>
            <author initials="F." surname="Tang" fullname="Fengxiao Tang">
              <organization/>
            </author>
            <author initials="Y." surname="Li" fullname="Yangfan Li">
              <organization/>
            </author>
            <author initials="M." surname="Zhao" fullname="Ming Zhao">
              <organization/>
            </author>
            <author initials="N." surname="Kato" fullname="Nei Kato">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="Liu2024">
          <front>
            <title>Large language models for networking: Workflow, advances and challenges</title>
            <author initials="C." surname="Liu" fullname="Chang Liu">
              <organization/>
            </author>
            <author initials="X." surname="Xie" fullname="Xiaohui Xie">
              <organization/>
            </author>
            <author initials="X." surname="Zhang" fullname="Xinggong Zhang">
              <organization/>
            </author>
            <author initials="Y." surname="Cui" fullname="Yong Cui">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="Fuad2024">
          <front>
            <title>An intent-based networks framework based on large language models</title>
            <author initials="A." surname="Fuad" fullname="Ahlam Fuad">
              <organization/>
            </author>
            <author initials="A. H." surname="Ahmed" fullname="Azza H. Ahmed">
              <organization/>
            </author>
            <author initials="M. A." surname="Riegler" fullname="Michael A. Riegler">
              <organization/>
            </author>
            <author initials="T." surname="Cicic" fullname="Tarik Cicic">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="Lira2024">
          <front>
            <title>Large language models for zero touch network configuration management</title>
            <author initials="O. G." surname="Lira" fullname="Oscar G. Lira">
              <organization/>
            </author>
            <author initials="O. M." surname="Caicedo" fullname="Oscar M. Caicedo">
              <organization/>
            </author>
            <author initials="N. L. S. da" surname="Fonseca" fullname="Nelson L. S. da Fonseca">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="Wang2024NetConfEval">
          <front>
            <title>Netconfeval: Can llms facilitate network configuration?</title>
            <author initials="C." surname="Wang" fullname="Changjie Wang">
              <organization/>
            </author>
            <author initials="M." surname="Scazzariello" fullname="Mariano Scazzariello">
              <organization/>
            </author>
            <author initials="A." surname="Farshin" fullname="Alireza Farshin">
              <organization/>
            </author>
            <author initials="S." surname="Ferlin" fullname="Simone Ferlin">
              <organization/>
            </author>
            <author initials="D." surname="Kostic" fullname="Dejan Kostic">
              <organization/>
            </author>
            <author initials="M." surname="Chiesa" fullname="Marco Chiesa">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 557?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
3rgF1NdPXwOAP3E9HPwvvlqeqS5aAAA=

-->

</rfc>
