<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-nmrg-llm-benchmark-02" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.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-02"/>
    <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="2026" month="July" day="06"/>
    <area>IRTF</area>
    <workgroup>Network Management Research Group</workgroup>
    <keyword>Large Language Model</keyword>
    <keyword>Network Configuration</keyword>
    <keyword>Benchmark</keyword>
    <abstract>
      <?line 169?>

<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 organized in two layers: outcome metrics that verify functional correctness in a method-agnostic way, and agentic process metrics that assess reasoning quality and interactive command generation. Functional testcase results serve as the primary metric; command and reasoning scores act as diagnostic estimates against the task's ground truth configurations (which may include more than one validated solution), and optional efficiency metrics capture time and token cost. The framework aims to enable reproducible, comprehensive, and fair comparisons among network configuration approaches, covering both agentic and non-agentic solutions while highlighting capabilities specific to autonomous agents.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://datatracker.ietf.org/doc/draft-cui-nmrg-llm-benchmark/"/>.
        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
        Network Management Research Group mailing list (<eref target="mailto:nmrg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/nmrg"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/nmrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/nobrowning/draft_llm_conf_benchmark"/>.</t>
    </note>
  </front>
  <middle>
    <?line 173?>

<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 emulator-based environment (built on GNS3) to simulate realistic device interactions.
2. A benchmark suite of forty tasks spanning routing, QoS, and security, each defined by intent, topology, initial state, a set of one or more ground truth configurations (each with an annotated reasoning trace), and expert-crafted testcases.
3. Multidimensional metrics organized in two layers: a primary <em>testcase score</em> that verifies functional outcomes in the emulated network; diagnostic <em>command score</em> and <em>reasoning score</em> that estimate the semantic correctness of generated commands and the coherence of internal reasoning against the task's ground truth configurations, in particular when testcases fail; and optional <em>efficiency metrics</em> such as wall-clock time and token consumption.</t>
      <t>NetConfBench aims to enable reproducible, comprehensive comparisons among single-turn LLMs, ReAct-style multiturn agents, and knowledge-augmented variants, guiding future research toward truly autonomous, intent-driven network configuration.</t>
      <section anchor="scope-and-applicability-to-agentic-approaches">
        <name>Scope and Applicability to Agentic Approaches</name>
        <t>While this document focuses on LLM-based agents, the framework is deliberately layered so that it is not limited to agentic solutions. The emulated environment, the task definitions, and the testcase-based outcome evaluation are method-agnostic: any configuration approach, including traditional automation scripts, template-based systems, or single-shot LLM generation, can be executed against the same tasks and scored on the outcome metrics, and can therefore serve as a baseline.</t>
        <t>The agent-specific value of the framework lies in the process layer. The interactive Agent-Network Interface, multi-turn feedback from live emulated devices, and the process metrics (reasoning coherence, interactive error correction, and efficiency under a step budget) capture capabilities that only apply to systems that autonomously perceive network state, plan, act, and revise their actions. This layered design allows agentic and non-agentic solutions to be compared directly on the same tasks, while making explicit which measured capabilities are specific to autonomous agents.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
      <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>
        <li>
          <t>Ground Truth Configurations: The set of one or more validated solutions defined for a task, each pairing a device-level command set with a reasoning trace. Since different configurations can achieve the same intended network behavior, a task's ground truth configurations MAY contain more than one solution, including solutions harvested from evaluation runs that passed all testcases.</t>
        </li>
        <li>
          <t>MCP (Model Context Protocol): An open standard protocol designed to facilitate communication between LLMs and external data sources or tools, enabling standardized tool discovery, invocation, and result handling.</t>
        </li>
      </ul>
    </section>
    <section anchor="framework-overview">
      <name>Framework Overview</name>
      <artwork><![CDATA[
+------------------+
|    Task Dataset  |                     +-------------------------+
|+----------------+|    +-----------+    |        Evaluator        |
||Network Intents ||(1) |           |(4) |+----------+ +----------+|
||+--------+      |---->| LLM Agent |<--->|Reasoning | |Grnd Truth||
|||Routing |      ||    |           |    ||Trajectory| |Reasoning ||
|||Policy  | +---+||    +-----------+    |+----------+ +----------+|
||+--------+ |QoS|||          |          |     \             /     |
||+--------+ +---+||          |          |  Rouge/Cos.Sim. (diag)  |
|||Security|      ||         (3)         |                         |
||+--------+      ||          |          |+----------+ +----------+|
|+----------------+|          |       (5)|| Final    | |Grnd Truth||
|+----------------+|          |        +->| Configs  | |Configs   ||
||Network Topology||    +-----------+  | |+----------+ +----------+|
||+-----+ +-----+ ||(2) |Environment|  | |     \             /     |
|||Nodes| |Links| |---->|           |-+  | Precision/Recall (diag) |
||+-----+ +-----+ ||    | R2 --- R1 |    |                         |
|+----------------+|    | |(GNS3)|  |(6) | +---------------------+ |
|                  |    | R3 --- R4 |<-->| |     Testcases       | |
|+----------------+|(2) |           |    | +---------------------+ |
||Initial Configs |---->| Emulator- |    |            |            |
|+----------------+|    |  based    |    |   Pass Rate (primary)   |
|                  |    |           |    |  Efficiency (optional)  |
+------------------+    +-----------+    +-------------------------+
        ^                                            |
        |                                            |
        +--------(7) Validated-Run Harvesting--------+

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

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> verifies functional outcomes through testcases and compares the agent's outputs against the task's ground truth configurations (validated solutions with their reasoning traces), computing scores for accuracy and completion.</t>
      <t>The framework supports multiple communication protocols for agent-environment interaction, including direct API calls and standardized protocols such as MCP. When using MCP, network operations are encapsulated as tools that can be discovered and invoked by the LLM agent through the MCP client-server architecture.</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 Configurations</strong>: A non-empty set of validated solutions that achieve the intent. Each solution pairs expert-validated (or later, harvested and validated) CLI commands with its own reasoning trace mapping high-level intent to low-level configuration actions. A task typically starts with a single expert-authored solution and MAY accumulate further solutions over time.</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, the framework provides 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_validation</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_validation</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_validation</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 metrics organized in two layers for each task. The <strong>testcase score</strong> is the primary outcome metric: it directly verifies whether the intended network behavior is achieved and is insensitive to which of several valid configurations the agent chose. The <strong>command score</strong> and <strong>reasoning score</strong> are diagnostic process metrics computed against the task's ground truth configurations; they are especially useful for estimating partial credit and analyzing failure causes when testcases do not pass. When a run passes all testcases, it is considered functionally correct regardless of how far its commands or reasoning diverge from the existing ground truth configurations, and the diagnostic scores are reported for analysis only. Optional efficiency metrics complement these accuracy-oriented scores. The core metrics are defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><strong>Reasoning Score (<tt>S_reasoning</tt>)</strong>      </t>
                <t>
The reasoning score evaluates whether the agent can coherently map network intents to concrete configuration actions through semantically aligned reasoning. This score compares the agent's reasoning process with a predefined ground truth reasoning process, focusing on logical consistency and semantic similarity.      </t>
                <t>
For one-shot prediction, prompts are designed to elicit the reasoning process prior to command generation, enabling direct comparison. For multi-turn interaction, an auxiliary LLM summarizes the interleaved steps into a unified reasoning process, which is then compared against the ground truth.
  The reasoning score is computed using cosine similarity:      </t>
                <t><tt>
 S_reasoning = (r_agent * r_gt) / (||r_agent|| * ||r_gt||)
</tt>      </t>
                <t>
where r_agent is the embedding of the agent's reasoning process, and r_gt is the embedding of the ground truth reasoning process. When a task's ground truth configurations contain multiple solutions, the similarity is computed against the reasoning trace of each solution and the maximum value is reported, so that an agent choosing a valid alternative approach is not penalized.</t>
              </li>
              <li>
                <t><strong>Command Score (<tt>S_command</tt>)</strong>      </t>
                <t>
This evaluation comprehensively assesses the effectiveness of configuration commands generated by the agent. While syntactic correctness is a prerequisite, it does not ensure that configuration commands are correctly applied to the device, particularly when commands must be issued within specific configuration contexts.      </t>
                <t>
After the agent completes its configuration task, the final configurations of all devices are exported and compared to their initial configurations to extract the set of commands that were actually applied. Hierarchical parsing using the Python library <tt>ciscoconfparse</tt> ensures structural completeness during comparison. Since certain configuration parameters (e.g., ACL numbers, route policy names) are manually defined and do not have fixed values, wildcard-based fuzzy matching is introduced to ignore non-essential differences and focus on semantic equivalence. When a task's ground truth configurations contain multiple solutions, precision and recall are computed against the command set of each solution and the best (maximum) harmonic mean is reported.      </t>
                <t>
Based on the extracted command sets, standard precision and recall are computed:
- Precision measures the proportion of correctly generated commands among all generated commands
- Recall measures the proportion of correctly generated commands relative to the ground truth command set      </t>
                <t>
The command score is reported as the harmonic mean of precision and recall:      </t>
                <t><tt>
S_command = (2 * Precision * Recall) / (Precision + Recall)
</tt></t>
              </li>
              <li>
                <t><strong>Testcase Score (<tt>S_testcase</tt>)</strong>      </t>
                <t>
While command-level evaluation based on configuration differences can effectively measure the semantic correctness of generated commands, it does not fully reflect whether the configuration actually achieves the intended network behaviors. To address this limitation, a testcase-driven evaluation strategy is introduced that directly verifies the functional correctness of the agent's configuration in the target environment.      </t>
                <t>
A set of validation testcases is defined for each task, where each testcase encodes a network intent in the form of executable verification commands. To support complex tasks involving multiple sub-goals, the overall intent is decomposed into sub-intents based on node-specific configuration objectives. Each sub-intent is then formulated as an individual testcase to enable fine-grained evaluation and enhance interpretability.      </t>
                <t>
Examples of testcases include:
- <strong>Routing intent</strong>: Verifying the next hop selection on intermediate routers to confirm end-to-end path correctness
- <strong>ACL intent</strong>: Simulating traffic flows and validating whether they are allowed or denied as expected
- <strong>QoS intent</strong>: Inspecting interface statistics to check whether QoS policies are properly enforced      </t>
                <t>
The testcase score is defined as the proportion of passed testcases among all defined testcases:      </t>
                <t><tt>
S_testcase = |Passed Testcases| / |Total Testcases|
</tt>      </t>
                <t>
This score reflects the agent's ability to produce configurations that meet functional requirements and demonstrates practical applicability in real-world deployment scenarios.</t>
              </li>
              <li>
                <t><strong>Efficiency Metrics (Optional)</strong>      </t>
                <t>
In addition to the accuracy-oriented scores above, the framework records optional efficiency and cost indicators for each run:      </t>
                <ul spacing="normal">
                  <li>
                    <t><strong>Wall-clock time</strong>: elapsed time from task assignment to task completion signal.</t>
                  </li>
                  <li>
                    <t><strong>Token consumption</strong>: total prompt and completion tokens consumed by the LLM, which approximates the monetary cost of a run.</t>
                  </li>
                  <li>
                    <t><strong>Interaction footprint</strong>: the number of interaction rounds and tool/API invocations issued through the Agent-Network Interface.</t>
                  </li>
                </ul>
                <t>
These metrics do not affect correctness scoring. They are reported as reference indicators alongside the core scores, enabling cost-aware comparison between approaches (e.g., a solution that achieves the same testcase score with substantially fewer tokens or less time) and revealing how interface design and skill/knowledge augmentation affect agent efficiency.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="workflow">
        <name>Workflow</name>
        <t>The evaluation workflow for each task proceeds through seven 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_validation</tt>.</t>
              </li>
              <li>
                <t>The natural language intent.</t>
              </li>
              <li>
                <t>(Optionally) Device model/version hints.</t>
              </li>
              <li>
                <t>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.
When using MCP, network operations are encapsulated as tools that can be discovered and invoked by the LLM agent through the MCP client-server architecture.</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>Testcase Score (primary):</strong> Execute each testcase in sequence; record pass/fail.</t>
              </li>
              <li>
                <t><strong>Command Score (diagnostic):</strong> Hierarchical diff against the best-matching solution in the task's ground truth configurations.</t>
              </li>
              <li>
                <t><strong>Reasoning Score (diagnostic):</strong> Compute embedding similarity between the agent's reasoning trace and the reasoning trace(s) of the ground truth configurations.</t>
              </li>
              <li>
                <t><strong>Efficiency Metrics (optional):</strong> Record wall-clock time, token consumption, and interaction footprint for the run.</t>
              </li>
            </ul>
            <t>
If all testcases pass, the run is deemed functionally correct and the diagnostic scores are reported for analysis only. If one or more testcases fail, the command and reasoning scores serve as an estimated partial-credit signal and support diagnosis of where the agent deviated from a valid solution.</t>
          </li>
          <li>
            <t><strong>Validated-Run Harvesting (Feedback Loop)</strong><br/>
If a run passes all testcases but its applied command set differs substantially from every existing solution in the task's ground truth configurations, the framework captures the run's command record and reasoning trace as a candidate solution and adds it to the task's <tt>ground_truth_configs</tt> with provenance metadata (see the Data Model section). Over time, this feedback loop accumulates the space of valid alternative solutions for each task, mitigating single-ground-truth bias in subsequent evaluations of both the command score and the reasoning score.</t>
          </li>
        </ol>
        <t>The final per-task result is reported with <tt>S_testcase</tt> as the primary score, accompanied by the diagnostic pair <tt>(S_reasoning, S_command)</tt> and, where recorded, the optional efficiency metrics.  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.0.2.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": [
    {
      "solution_id": "expert-0001",
      "configs": {
        "NewYork": [
          "ip route 203.0.113.0 255.255.255.252 192.0.2.2",
          "ip route 203.0.113.0 255.255.255.252 198.51.100.2 100"
        ],
        ...
      },
      "reasoning": "NewYork to Washington Loopback
      (primary path): add a static route for Washington's
      Loopback0 network (203.0.113.0/30) pointing to the
      next-hop 192.0.2.2...",
      "provenance": "expert-authored"
    },
    {
      "solution_id": "harvested-0007",
      "configs": {
        "NewYork": [
          "ip route 203.0.113.0 255.255.255.252 Serial0/0",
          "ip route 203.0.113.0 255.255.255.252 Serial0/1 100"
        ],
        ...
      },
      "reasoning": "Use exit-interface static routes over the
      serial links instead of next-hop addresses...",
      "provenance": "harvested-from-validated-run"
    }
  ],
  "testcases": [
    {
      "name": "Static Route from NewYork to Washington",
      "expected_result": {
        "protocol": "static", 
        "next_hop": "192.0.2.2"
      }
    },
    ...
  ]
}
]]></sourcecode>
        <t>Because a given intent may be satisfied by multiple distinct configurations, <tt>ground_truth_configs</tt> is defined as a non-empty array of solutions rather than a single command set. Each solution carries:</t>
        <ul spacing="normal">
          <li>
            <t><tt>solution_id</tt>: a unique identifier within the task.</t>
          </li>
          <li>
            <t><tt>configs</tt>: per-device command sets that achieve the intent.</t>
          </li>
          <li>
            <t><tt>reasoning</tt>: a textual record of the step-by-step reasoning that maps the intent to the commands in <tt>configs</tt>.</t>
          </li>
          <li>
            <t><tt>provenance</tt>: how the solution was obtained, e.g., <tt>expert-authored</tt> or <tt>harvested-from-validated-run</tt>.</t>
          </li>
        </ul>
        <t>A task typically starts with a single <tt>expert-authored</tt> solution. Additional solutions harvested from evaluation runs (see the Workflow section) are appended to the same array once a run has passed all testcases, growing the set of known-valid solutions for the task over time.</t>
      </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.0.2.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 203.0.113.0 255.255.255.252 192.0.2.2"
    ]
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "results": [
    { "command": "configure terminal", "status": "success" },
    { "command":
        "ip route 203.0.113.0 255.255.255.252 192.0.2.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_validation</tt></strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Request</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "method": "execute_validation",
  "params": {
    "device": "R1",
    "command": "show ip route 203.0.113.0 255.255.255.252"
  }
}
]]></sourcecode>
              </li>
              <li>
                <t><strong>Response</strong>:      </t>
                <sourcecode type="json"><![CDATA[
{
  "output": "S 203.0.113.0/30 [1/0] via 192.0.2.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 203.0.113.0 255.255.255.252"
        ],
        "expected_output":
          "S 203.0.113.0/30 [1/0] via 192.0.2.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="dataset-contribution-and-interoperability">
      <name>Dataset Contribution and Interoperability</name>
      <t>The initial NetConfBench dataset of forty tasks is intentionally modest in size. Rather than positioning the task schema as a private format tied to a single dataset, this document proposes it as a candidate exchange format for benchmarks of LLM/agent-driven network configuration, together with a lightweight process for community contribution. The goal is not a single dataset but a set of interoperable datasets that share a common notion of what a task, a validated solution, and a verifiable outcome are.</t>
      <section anchor="task-schema-as-an-exchange-format">
        <name>Task Schema as an Exchange Format</name>
        <t>The JSON task schema defined in the Data Model section captures the minimal elements that emulator-based configuration evaluation requires: an intent, a topology, an initial state, one or more ground truth configurations, and executable testcases. Existing datasets from other efforts can be imported by mapping their scenarios onto these elements; the mandatory fields are the intent, the topology, and the testcases, while additional ground truth configurations and their reasoning traces are optional and can be added incrementally (including through the validated-run harvesting loop described in the Workflow section). Conversely, NetConfBench tasks can be exported to other evaluation harnesses that consume intent/topology/verification triples. Future revisions may additionally support YANG-based topology and service representations to improve alignment with IETF data models.</t>
      </section>
      <section anchor="contribution-process">
        <name>Contribution Process</name>
        <t>A formal contribution process (submission templates, acceptance criteria, and a dataset versioning policy) is future work and will be specified in a subsequent revision of this document, informed by feedback from the NMRG and NMOP communities and by alignment with the GSMA Open-Telco LLM Benchmarks community.</t>
      </section>
      <section anchor="relationship-to-other-benchmarking-efforts">
        <name>Relationship to Other Benchmarking Efforts</name>
        <t>This framework is complementary to other community benchmarking efforts for AI in networking, in particular the GSMA Open-Telco LLM Benchmarks community, which evaluates models against operator-submitted telecom use cases with an emphasis on domain knowledge, safety, and energy efficiency. Those benchmarks are largely centered on knowledge- and analysis-oriented tasks, whereas NetConfBench provides an interactive, emulator-based environment that evaluates configuration actions and their functional outcomes. The two are natural counterparts: operator-submitted use cases can be turned into NetConfBench tasks through the exchange format above, and NetConfBench tasks and results can in turn be contributed to such communities <xref target="GSMA2025"/>. The authors intend to pursue this alignment so that datasets for LLM/agent network configuration converge on shared expectations rather than fragmenting across efforts.</t>
      </section>
    </section>
    <section anchor="mcp-based-implementation">
      <name>MCP-Based Implementation</name>
      <t>The Model Context Protocol (MCP) provides a standardized approach for implementing the Agent-Network Interface (ANI). This section describes how MCP can be applied to NetConfBench for LLM-driven network configuration evaluation.</t>
      <section anchor="benefits-of-mcp-integration">
        <name>Benefits of MCP Integration</name>
        <t>Integrating MCP into NetConfBench provides several advantages:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Standardization</strong>: MCP provides a uniform interface for tool invocation across different LLM implementations and network environments.</t>
          </li>
          <li>
            <t><strong>Vendor Abstraction</strong>: The MCP server can handle vendor-specific command translation, allowing the LLM to work with high-level operations without needing detailed knowledge of each vendor's CLI syntax.</t>
          </li>
          <li>
            <t><strong>Tool Extensibility</strong>: New network operations can be easily added as MCP tools without modifying the LLM agent implementation.</t>
          </li>
          <li>
            <t><strong>Traceability</strong>: The structured MCP communication protocol enables detailed logging of all tool invocations and results, facilitating debugging and analysis.</t>
          </li>
          <li>
            <t><strong>Ecosystem Integration</strong>: MCP-enabled network tools can potentially be reused across different AI applications beyond network configuration evaluation.</t>
          </li>
        </ol>
      </section>
      <section anchor="mcp-tool-definitions-for-ani-operations">
        <name>MCP Tool Definitions for ANI Operations</name>
        <t>This subsection provides the complete MCP tool definitions for the four core Agent-Network Interface operations: <tt>get-topology</tt>, <tt>get-running-cfg</tt>, <tt>update-cfg</tt>, and <tt>execute_validation</tt>. These definitions use JSON Schema to specify tool parameters and enable LLMs to understand and invoke network operations through the MCP protocol.</t>
        <section anchor="gettopology">
          <name>1. get_topology</name>
          <t>This tool provides network topology information in a format interpretable by the LLM, returning topology for specified devices or the entire network if no devices are specified.</t>
          <sourcecode type="json"><![CDATA[
{

  "name": "get_topology",
  "description": "Retrieve network topology information including
   nodes and their interconnections. Returns topology for 
   specified devices or entire network if no devices specified.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "devices": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "List of device names. Leave empty for 
        entire network topology."
      }
    }
  }
}
]]></sourcecode>
          <t><strong>Usage Example</strong>:</t>
          <sourcecode type="json"><![CDATA[
{
  "method": "tools/call",
  "params": {
    "name": "get_topology",
    "arguments": {
      "devices": ["R1", "R2", "R3"]
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="getrunningconfig">
          <name>2. get_running_config</name>
          <t>This tool enables the agent to obtain the active configurations of specified devices, providing essential context for planning subsequent updates.</t>
          <sourcecode type="json"><![CDATA[
{
  "name": "get_running_config",
  "description": "Retrieve the active running configuration 
  from a network device. Returns the complete configuration 
  as a text string.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "device": {
        "type": "string",
        "description": "Device name or identifier to retrieve
         configuration from"
      }
    },
    "required": ["device"]
  }
}
]]></sourcecode>
          <t><strong>Usage Example</strong>:</t>
          <sourcecode type="json"><![CDATA[
{
  "method": "tools/call",
  "params": {
    "name": "get_running_config",
    "arguments": {
      "device": "R1"
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="updateconfig">
          <name>3. update_config</name>
          <t>This tool 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>
          <sourcecode type="json"><![CDATA[
{
  "name": "update_config",
  "description": "Apply configuration commands to a network
   device. Executes a sequence of CLI commands and returns
    detailed status for each command.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "device": {
        "type": "string",
        "description": "Device name or identifier to apply
         configuration to"
      },
      "commands": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Ordered list of CLI commands to
         execute on the device"
      }
    },
    "required": ["device", "commands"]
  }

}

]]></sourcecode>
          <t><strong>Usage Example</strong>:</t>
          <sourcecode type="json"><![CDATA[
{
  "method": "tools/call",
  "params": {
    "name": "update_config",
    "arguments": {
      "device": "R1",
      "commands": [
        "configure terminal",
        "interface GigabitEthernet0/0",
        "ip address 192.0.2.1 255.255.255.0",
        "no shutdown"
      ]
    }
  }
}
]]></sourcecode>
          <t>### 4. execute_cmd</t>
          <t>This tool accepts a device name and a read-only command string as parameters and returns the resulting output. It MUST NOT alter the device state and is intended for validation and status inspection.</t>
          <sourcecode type="json"><![CDATA[
{
  "name": "execute_validation",
  "description": "Execute a read-only validation command
   on a network device to verify configuration or check
    device status. This command must not alter the 
    device state.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "device": {
        "type": "string",
        "description": "Device name or identifier to 
        execute command on"
      },
      "command": {
        "type": "string",
        "description": "Read-only command to execute
         (e.g., show commands)"
      }
    },
    "required": ["device", "command"]
  }
}

]]></sourcecode>
          <t><strong>Usage Example</strong>:</t>
          <sourcecode type="json"><![CDATA[
{
  "method": "tools/call",
  "params": {
    "name": "execute_validation",
    "arguments": {
      "device": "R1",
      "command": "show ip route 203.0.113.0 255.255.255.252"
    }
  }
}

]]></sourcecode>
          <t>These four tools form the core MCP interface for NetConfBench. The MCP server MUST register these tools and handle the translation between MCP tool invocations and actual device communication protocols (CLI, NETCONF, RESTCONF, etc.). The JSON Schema definitions in <tt>inputSchema</tt> enable LLMs to automatically understand parameter requirements and generate valid tool calls.</t>
        </section>
      </section>
      <section anchor="additional-mcp-tools-for-advanced-scenarios">
        <name>Additional MCP Tools for Advanced Scenarios</name>
        <t>Beyond the four core ANI operations, additional MCP tools can be defined for more complex scenarios. The following examples demonstrate extended tool definitions:</t>
        <section anchor="batchconfiguredevices">
          <name>batch_configure_devices</name>
          <t>For batch operations across multiple devices:</t>
          <sourcecode type="json"><![CDATA[
{
  "name": "batch_configure_devices",
  "description": "Apply configuration commands to
   multiple network devices simultaneously",
  "inputSchema": {
    "type": "object",
    "properties": {
      "device_ips": {
        "type": "array",
        "items": {"type": "string"},
        "description": "List of device IP addresses"
      },
      "commands": {
        "type": "array",
        "items": {"type": "string"},
        "description": "CLI command sequence to execute"
      },
      "credential_id": {
        "type": "string",
        "description": "Authentication credential
         identifier"
      }
    },
    "required": ["device_ips", "commands"]
  }
}

]]></sourcecode>
        </section>
        <section anchor="checkdevicestatus">
          <name>check_device_status</name>
          <t>For comprehensive device health monitoring:</t>
          <sourcecode type="json"><![CDATA[
{
  "name": "check_device_status",
  "description": "Check operational status of network
   devices including CPU, memory, and interface metrics",
  "inputSchema": {
    "type": "object",
    "properties": {
      "device_ip": {
        "type": "string",
        "description": "Device IP address to check"
      },
      "metrics": {
        "type": "array",
        "items": {
          "enum": ["cpu", "memory", "interface"]
        },
        "description": "List of metrics to retrieve"
      }
    },
    "required": ["device_ip", "metrics"]
  }
}

]]></sourcecode>
          <t>These additional tools demonstrate the extensibility of the MCP approach, allowing the framework to support advanced scenarios such as batch operations and comprehensive device monitoring.</t>
        </section>
      </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. Validation endpoints MUST enforce read-only execution (e.g., execute-validation) to prevent unintended state changes. Where appropriate, human-in-the-loop approval SHOULD gate privileged write operations (update-cfg/update-config) identified as high-impact.</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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <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>
        <reference anchor="GSMA2025" target="https://www.gsma.com/get-involved/gsma-foundry/gsma-open-telco-llm-benchmarks/">
          <front>
            <title>GSMA Open-Telco LLM Benchmarks</title>
            <author>
              <organization>GSMA Foundry</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 961?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Laurent Ciavaglia for his valuable comments and suggestions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
