get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2195728/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2195728,
    "url": "http://patchwork.ozlabs.org/api/patches/2195728/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ovn/patch/20260211175841.3756146-2-aditya.mehakare@nutanix.com/",
    "project": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/projects/68/?format=api",
        "name": "Open Virtual Network development",
        "link_name": "ovn",
        "list_id": "ovs-dev.openvswitch.org",
        "list_email": "ovs-dev@openvswitch.org",
        "web_url": "http://openvswitch.org/",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260211175841.3756146-2-aditya.mehakare@nutanix.com>",
    "list_archive_url": null,
    "date": "2026-02-11T17:58:40",
    "name": "[ovs-dev,v4,1/2] ovn-nb, ovn-nbctl: Add ID column to Network_Function table.",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "c6dc31fe7ea0d62ef1198f5fb1628f7fabbb15ae",
    "submitter": {
        "id": 90537,
        "url": "http://patchwork.ozlabs.org/api/people/90537/?format=api",
        "name": "Aditya Mehakare",
        "email": "aditya.mehakare@nutanix.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/ovn/patch/20260211175841.3756146-2-aditya.mehakare@nutanix.com/mbox/",
    "series": [
        {
            "id": 491889,
            "url": "http://patchwork.ozlabs.org/api/series/491889/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ovn/list/?series=491889",
            "date": "2026-02-11T17:58:39",
            "name": "Network Function: Commit NF ID instead of NFG ID in CT.",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/491889/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2195728/comments/",
    "check": "warning",
    "checks": "http://patchwork.ozlabs.org/api/patches/2195728/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<ovs-dev-bounces@openvswitch.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "dev@openvswitch.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "ovs-dev@lists.linuxfoundation.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=proofpoint20171006 header.b=lqbEb8XQ;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=selector1 header.b=pFynK0Zo;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=140.211.166.136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)",
            "smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key)\n header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=proofpoint20171006 header.b=lqbEb8XQ;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key,\n unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=selector1 header.b=pFynK0Zo",
            "smtp2.osuosl.org;\n dmarc=pass (p=none dis=none) header.from=nutanix.com",
            "smtp2.osuosl.org;\n dkim=pass (2048-bit key, unprotected) header.d=nutanix.com\n header.i=@nutanix.com header.a=rsa-sha256 header.s=proofpoint20171006\n header.b=lqbEb8XQ; dkim=pass (2048-bit key,\n unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=selector1 header.b=pFynK0Zo"
        ],
        "Received": [
            "from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fB5lx1sFNz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 12 Feb 2026 04:59:09 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id 38D45613E8;\n\tWed, 11 Feb 2026 17:59:05 +0000 (UTC)",
            "from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id A9k92gYZNBP8; Wed, 11 Feb 2026 17:59:03 +0000 (UTC)",
            "from lists.linuxfoundation.org (lf-lists.osuosl.org\n [IPv6:2605:bc80:3010:104::8cd3:938])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 5E61C613BE;\n\tWed, 11 Feb 2026 17:59:02 +0000 (UTC)",
            "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 04221C077F;\n\tWed, 11 Feb 2026 17:59:02 +0000 (UTC)",
            "from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 9229CC077E\n for <dev@openvswitch.org>; Wed, 11 Feb 2026 17:59:00 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp2.osuosl.org (Postfix) with ESMTP id 7083C40F43\n for <dev@openvswitch.org>; Wed, 11 Feb 2026 17:59:00 +0000 (UTC)",
            "from smtp2.osuosl.org ([127.0.0.1])\n by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id 863hTV1k07JB for <dev@openvswitch.org>;\n Wed, 11 Feb 2026 17:58:59 +0000 (UTC)",
            "from mx0b-002c1b01.pphosted.com (mx0b-002c1b01.pphosted.com\n [148.163.155.12])\n by smtp2.osuosl.org (Postfix) with ESMTPS id 23F80409E9\n for <dev@openvswitch.org>; Wed, 11 Feb 2026 17:58:58 +0000 (UTC)",
            "from pps.filterd (m0127844.ppops.net [127.0.0.1])\n by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 61BG0rpB907607; Wed, 11 Feb 2026 09:58:57 -0800",
            "from bn1pr04cu002.outbound.protection.outlook.com\n (mail-eastus2azon11020098.outbound.protection.outlook.com [52.101.56.98])\n by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4c87tubxxf-1\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Wed, 11 Feb 2026 09:58:57 -0800 (PST)",
            "from CY5PR02MB9038.namprd02.prod.outlook.com (2603:10b6:930:32::5)\n by CY8PR02MB9179.namprd02.prod.outlook.com (2603:10b6:930:9a::5) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.10; Wed, 11 Feb\n 2026 17:58:53 +0000",
            "from CY5PR02MB9038.namprd02.prod.outlook.com\n ([fe80::88d2:46ce:c264:17ec]) by CY5PR02MB9038.namprd02.prod.outlook.com\n ([fe80::88d2:46ce:c264:17ec%4]) with mapi id 15.20.9611.008; Wed, 11 Feb 2026\n 17:58:53 +0000"
        ],
        "X-Virus-Scanned": [
            "amavis at osuosl.org",
            "amavis at osuosl.org"
        ],
        "X-Comment": "SPF check N/A for local connections -\n client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ",
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 smtp3.osuosl.org 5E61C613BE",
            "OpenDKIM Filter v2.11.0 smtp2.osuosl.org 23F80409E9"
        ],
        "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=148.163.155.12;\n helo=mx0b-002c1b01.pphosted.com; envelope-from=aditya.mehakare@nutanix.com;\n receiver=<UNKNOWN>",
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp2.osuosl.org 23F80409E9",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h=\n cc:content-transfer-encoding:content-type:date:from:in-reply-to\n :message-id:mime-version:references:subject:to; s=\n proofpoint20171006; bh=eKp9+JJCExKMu1CXcQbm7t+DENAI7PD8a/v+EuqUP\n /A=; b=lqbEb8XQ3YqJb3cNWY3HZQl4LdygFOgzT2fC0TM46rXvn40nQ32KRiKzb\n hjXxHqIkeUizNQXr3cKCwLcdyxpFrT0P8KIaVvqL/7WS5lVl937NrOUgXSB7quyO\n I64dNqI6c1srAqqk42f6MqWj54wgTpLuxkBCbpaEzwOgkoI2uc9k9eXsnDc7UbjX\n sVbLaw7uik1S8BQMm8hfgS6Mh3F0AkGKz8xghjejFtJ8Wb0VV1ZpaR3GmT5NPD1K\n Gr87Zti4S/YmCsPet9skEYqUsxxBtF00MGAp2EtKGlfITfkcAta4EDufzzpRR2C/\n kph+z+AOzKa2k3zSb3AP4hmlLmQhA==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=eKp9+JJCExKMu1CXcQbm7t+DENAI7PD8a/v+EuqUP/A=;\n b=pFynK0ZoSwxVEkyV8oUXRHDIsHF4Gc0IpjK6xieUuWVo1tO/n327HmNBIq88h8rCaE2TGW8+mYckEW7t8VzgS0P8vejo/m2KZvjlyOh6tt0YzyjDP7Y1dXvLXRlp6PsuaGAKvlJNruVxVZW7rPgLqZdQc7t/9RgArOLMj0DVeu8AMzQ8F6Jcy1mOQgKH63qZPbN8C62E7yFn15s/AK15k8/QMPTcl9v9CyiX26vq6S+l08WmrmDtud4DKvzzU3z5gYWa51KQDMucYMwCFmWhhCrNXZsQjc0Io1seNcCVQOuj3VCYL0hKArPVH5YL4KynCVuk9I+J9PkwKTQMBpbvPw=="
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=JXLjB5VbsxbTY0xE3rBgKgFh+WdrDU9bnzwp126JtoCLj74RJkqx66zjVYx3nZjaoX1pWpNgdhtee6fHNgmMnEbssiVABURqhdI5vk7joSWIGokI/EULO/ye/bMBsjyySgTaRgmJuKTpggCqITKPUmoSU2XE+RMwgNS5n2Pn0PZPYDZREwtBDnwTtCTKTbXBlYA8Vs3GDhRt0K3tjQulBgAPJvunSCieJsxwYC875tBBiHSvrhzFDzHti1B+/snFIXuALkdfpHklLvcXKLtgpR3x2UvCx11L6VVwgTT2eiQXsYKm7RH9arUkQNQjzz3WgaffRxgD0lwJwh0ogyC1Tw==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=eKp9+JJCExKMu1CXcQbm7t+DENAI7PD8a/v+EuqUP/A=;\n b=GkjF/rfL4A9J2lgQt52WZ/v2Gdh+2q1hezdTr3ktHNoU/0XSbrXPPNbnoGgU/4iX2gYF+aFuAIeOdMyKKOZM1HRGlB46KfUtfMuGMIOl7AC75DXpkW6ecdvnmKZKVS9eZ4MlsyFe2fsigT0uS567rOsW1pemfxsO/UHNG53eHPpWSSfCM8+aPBhf/QJ8mKR+wze19hgYvSVasuuI1BOwPXrSElUM1s4E00mhjG5r5Eo/GxoSCqVGDmCOgblIdCuX57zag5GZ3gGznxgpZrCzKYfIBkMgSlxYuJLjuyuOEgDALmdHa/S/JbtJzR9s4tNIlQyrIE+J4myXxrr3saRVGw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com;\n dkim=pass header.d=nutanix.com; arc=none",
        "From": "Aditya Mehakare <aditya.mehakare@nutanix.com>",
        "To": "dev@openvswitch.org",
        "Date": "Wed, 11 Feb 2026 17:58:40 +0000",
        "Message-ID": "<20260211175841.3756146-2-aditya.mehakare@nutanix.com>",
        "X-Mailer": "git-send-email 2.43.5",
        "In-Reply-To": "<20260211175841.3756146-1-aditya.mehakare@nutanix.com>",
        "References": "<20260211175841.3756146-1-aditya.mehakare@nutanix.com>",
        "X-ClientProxiedBy": "PH7P220CA0075.NAMP220.PROD.OUTLOOK.COM\n (2603:10b6:510:32c::11) To CY5PR02MB9038.namprd02.prod.outlook.com\n (2603:10b6:930:32::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "CY5PR02MB9038:EE_|CY8PR02MB9179:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "6085aea0-c621-4694-2d94-08de69973824",
        "x-proofpoint-crosstenant": "true",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|376014|52116014|366016|1800799024|38350700014;",
        "X-Microsoft-Antispam-Message-Info": "\n 3TnNy9sk2BVKi7Gess95VpkLV3ofrwb9MYbwuEsAy/PxJ3IymhD/dcf94RCQt9TjmNluwI35WaH7qmTXb5Igefn03B7reLIJ1u/dkszLz6Xh+NVh621A/EDHpnNkfkXbgimzoIj99FUn0JPDGUSyOmejLUhCtF+/ENFf44A8YUPRUHkn9auIMf8/5zk8vndaKkJIf20I781EALV7tB1002rlI4kf5XimjeL/vCXfSu1wydJ8t4QEtYtRTozlJrTrMW4Uj2FCMZzg9SQlgjIwDPs40SwY2aAwfNlZ51Z2sx8rxuhVoH8tA/Drj4rHJhJBnmi60e8fVnwtWhmfvGiqnaHB7kfUTcE70i5Hn5k5rKV0NQliA519JrmHQ+8x6BlJtFEJeleQYDMrLC6bKZhwnqfHTec1mWN3ly4TuOpX+pVvm/MJs2+Y+9wAKTWrRgm2gHd5cnOICGE/WPt2gNFfcY9uClmUZiJRCt82qtwfypTHhSzIHQ9l6M8/6oZkowf4InR0Cjh9YTiaQJpUPUD9zTmuLPrm2XwAkGPpFuEKMD5T4Kk3bsJkxLMq/vaw0WYQgVgmYITytidwaSdsYaakT8h97UEhWiUOsa6YMExoCPhiKPxFmsLudDTEyKHo//mAiQ4OTN0lXvd0PHU1O857xz77vkovt9xq6ThcMPgJXSVD2uJCYcNAUBDE9PpdA5w5iigojRaeK5OFB36Bg9Sx3v9LnkowiLA4ashwmu+YuTL257Nhf6cZYYyTvJGjvcZOe9K6MpRI1UqC61eHRINd3AgdzrCqD+KNsbaj01ElOOLTlcFuZhfcTi0yKg8F2i09WjZofsSUmCDNiXZ4d6HM8VbETpB2rieX5C0AqGBMPuX7qSbO9T+sfNKhhi6Q2MU2cIFAjtEryfm1wrDGDEm7W7wFIHBzmWv4ycvWGrgeUgufox+GrDbJhPHWn5uUF/UB6toZxV94SMUNgO7/hRzU1yObpzd5uDhPC4XpQ3g1HDBuAXuHgn0C+ZbH296034gyijZ6Rz/xKSGzPLcR1WM3a6KwOyOlYIOM9+7sjYyOx+drCwfBW4NiuZIDquBUz99YayzeyvLyCLyA+tdL4/nTDNJz9m8s0FH+Qfp8wfBnJmSQb9EXvPh6hFQVvDyIxWX72dnEjeXSbind1rh+gFuimXhTYC/kMrI6xvOHEoTVy0SohEGLJrzetm8yz3dV7wUIJ9vu2K+BuXdGYn0oXci2wrEUco4VklJbwUUC7vG6AugOw3SYg6EWR8rCM1FHsfIIzGuYyMX8ERO1KxRlNb3cJ5E+VUIJhUAvVlI0+6UiEdyTxw3ljEviuahYL6E2gdG5upSzC8sAPJ5JnszaDIz7fDGFjOoEAEnPcTWLcwa0OFz52Gfm4+/Kl+xSMY8ex85CQ4KROax+iNC0Vl/3GzYGuyGt3bxTcxIwlPi0Wly91psvhiV0nIHnOR+beyEMmHVlBjM5WoyoIA29ort3DQ5526ygTwa0d/bvGPMLNb7crg1MCnFMMWHE5I24J50c6I4jbfiNOalfP1hMmeFD2MKhEeEgvgw0TmbCJtHYJ1aM0MSywwY5CUeL9u7kkpm7wV1a7p98dO/Ej7kQdLLkqyZrkpqVhSgZ5UUyt9iSdx0tfnU=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:CY5PR02MB9038.namprd02.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(376014)(52116014)(366016)(1800799024)(38350700014); DIR:OUT;\n SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n 1iLVZOswJST+p3m61PV6lM/DktsBwQuvgQmGD/m9ndQBZlCbxIYVnkEjIarcUMWXTsGqtvIjov8YDxiw4cslByB/qT+NdmjrIZgK0JNlQOkoG4OA/V1aGQybZ3/pC3SA3OxPRPyRjntXuyQ2JwLwNabOJLTJveWseIjdeoeSs2Z3aULzhB2dAfnNDIWW++svEs6Tu9gntozjgfmgizwKRZzbqJYQ66v+3amA+x/FPHB7L2ruTBKDA6PtN+foG7FGZdS7Q15bh5H1MWUd98AiEBNNsP4S+SdBceTA2SaeJqF5itgHQloKa8QCBW6K7XSWr4LStspMiw7Lg5IvGq4NWt0hUvq5/LA2iu6sz9o1bXNhDPtVp6zNN8hkwY/nXOe3na5RPpZ8fujc17oDLJOPktpWnrUuvBk60xkROxhXLVnyZOHwYoLhdfijFeobonPFM2qyyZ6L4jNEve1fWy9M5emBvBGEv6FY+xt1eBdTJLKYr9voD6tWHI1RGcylE5H0RCGfKOepXUTh2jcBXiYjyhuE/PahZOPwYFBxLNtYLrI4k458iq+B+0a7fcNQqUObcxAS3Y7P5IB6WbVpyR2vkKc2JDFgkk14HrQk7ihiUxeAhyyD1hTmZ2/ErW/f85i/hsaOgU/UPsn5OJhvdER3nlbZYJwW+HxEqmgKGB6mPUYzRf615shFjMIx1MGYOPg4y5QoVNoEPUw6RrV+ZewGfBQT6xVUrvPhKMZhYDSvHSOsEKU8lszXUiQVztIRtG1XkwLMnx1j9Zief2XYwI9heHZ02uXoclINx5VUymYygU2fVU/CSHLxwq/tPCviAeLJagjLMjRUi9yZQCE6kVNUSNsied2FGzCYtyF4WD/hfTvB6k/rY6JGbaQSSD1JqE58hljKVl6REwWtiQ/hzJE42z627SA0LK4EJbVIHRg9LlvruzaHuohl4dYnJmVjB9MWKPePMN91Mkg5GMgywM9KpZLk8qzPmv/py3QVHdAcCs4EV+Fb4E9TRqBm/7r6Eo0ONHWnJF9YRFvnvtehL8MuuZ7/WvJKPZb3JzGuq02c8v5a+C8CKZY+YHwbk8L93vaH0PxoSejIsdsyJCyUeYrZz8Tf/cKgP+2HcoeaSkxRBvHOsTd03VU+FlfbSrByo5XivVSJ+R3bJoTqDK/GltKXbhityl8UnaReGAKcE83zS39PQpLPjSP44dQ0jG0z1KiXJNfsE9+cSgv9zGUrqeKeUR1wBJpm3GKuC7eiU/s9ANLa0RgW3l+lNXhci1HV3ktNuaM2uqd3BklfFtrI7VOZF6sXl+q9NTtv9Xg/ypj8KnFKna60fkUav1VJKloX2tpmC3gg36MzjLl5Nq3oti/UJmwT8yJJD7QRn+p+pM0MgvecKkz17S2+frIUf6Sg0Lj2Cv1Qf7jRQq124woiqWrNBHOwvSc85F96AikBosDqyCg1rqgeqmXQ3NGNOhxMKDYsXnEMUtoShGIbDCcAugk7ePo9NCnXzsNR3uwZ/KYmoZp/hivvofaKaBxRvJh4VMxyJMKv0KC0ZokeeDDHQMmi6c1g12u/s8WyKsUczfy158GCKfiphPb5YcVcx2QeQxtVRChxe/LM3TYyvtN072+bKb2I0+kmzI3pONVpXf3sr32bCR1qxx1xWwgTQmoV5a9+1tBUbjk5CRIHqaWGaCW4sQW+3cFcARJFdvU96cjVOwDXCLmurqZpHu2ykePgycS4O7j8VrMrCCU8uT2CcCIUQxaDlUwk9MEJGWac0yX5uxY=",
        "X-OriginatorOrg": "nutanix.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6085aea0-c621-4694-2d94-08de69973824",
        "X-MS-Exchange-CrossTenant-AuthSource": "CY5PR02MB9038.namprd02.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "11 Feb 2026 17:58:53.7531 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "bb047546-786f-4de1-bd75-24e5b6f79043",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n 10DrNnZ4Y1q8CCYytaUi5vB+YYejqprZR7teOXWZefef3TiDNSopxt4EMzuJ/AOH6dGZBS875BJPcoKGrQiWxNTdJIzRO0uRWiIiXveACUg=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY8PR02MB9179",
        "X-Proofpoint-GUID": "6n58EDxJGPbupzQpAfHaQgUiSOFUw9Gh",
        "X-Proofpoint-ORIG-GUID": "6n58EDxJGPbupzQpAfHaQgUiSOFUw9Gh",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwMjExMDEzOSBTYWx0ZWRfX0BRPe3KwRZL5\n tHPaVrwjU8OrNW+EhFl1tye94ljmq6Tnedkwxy0tvgUb8UJFxiqXZgWhL49owNxFZIa0XXWwFjT\n ou94ZUdXzhBX1kQ0TEpFk12Ydr6xc76r3VZR61GUoP0QFPividwI3zPDwggbUGi15SbWrIMykgi\n pCRPKoiS4GhnhUwaGBDZW6l+7RVFCZPz0BPMQ6IBclF/TfvgLxSpTAYnGqs+A8eWL2JSc+sio/T\n ven8pWHyPNFmTTqCoKSztWOK2P9YApAq9nGqrBV/P4PD3FOQo8JvqxWkWh3OWox/Bi2Lv6jpBiH\n eY71QI7iVWvrcBnrQFAU8q6QetSUlEZMbhT9eIo6OZk0vtkRP5+JJ2zJMTxJim9o185z4Il5CIi\n QsGwWOEXuzlY7Q8DnaMNN0gHGn5insVNsotlt+qMScTHJ2sWtLfUQr6HWJVH6r8lW1K6FDOi/RK\n Dptb3LmwPgm75Bq0YCw==",
        "X-Authority-Analysis": "v=2.4 cv=bpRBxUai c=1 sm=1 tr=0 ts=698cc361 cx=c_pps\n a=+sLJoloK99bVPEAi26XZpw==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19\n a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19\n a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=0kUYKlekyDsA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22\n a=64Cc0HZtAAAA:8 a=20KFwNOVAAAA:8 a=aAMxtZR7PRPacgAE-WMA:9\n a=O-m64GDmhePosm9E:21",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-02-11_02,2026-02-11_04,2025-10-01_01",
        "X-Proofpoint-Spam-Reason": "safe",
        "Subject": "[ovs-dev] [PATCH ovn v4 1/2] ovn-nb,\n ovn-nbctl: Add ID column to Network_Function table.",
        "X-BeenThere": "ovs-dev@openvswitch.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "<ovs-dev.openvswitch.org>",
        "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>",
        "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>",
        "List-Post": "<mailto:ovs-dev@openvswitch.org>",
        "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>",
        "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "ovs-dev-bounces@openvswitch.org",
        "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>"
    },
    "content": "This commit introduces a new 'id' column to the Network_Function\ntable in the OVN Northbound database schema. The ID is a mandatory\ninteger field (range 1-255) with a unique index constraint.\n\nThis change is required to support network function active-active\nmode in future releases. The ID will be used to uniquely identify\nnetwork functions in scenarios where multiple instances need to be\nmanaged simultaneously.\n\nSince this is a schema change that is not backward compatible, it\nis being introduced in the current release to ensure smoother\nupgrades when active-active mode support is added in subsequent\nreleases.\n\nSchema changes:\n- Added 'id' column to Network_Function table (integer, 1-255)\n- Added unique index on 'id' column alongside existing 'name'\n  index\n\nChanges to ovn-nbctl:\n- Updated nf-add command to require ID parameter:\n  nf-add NETWORK-FUNCTION ID PORT-IN PORT-OUT\n- Modified nf-list to display the ID field\n- Updated related documentation and tests\n\nSigned-off-by: Aditya Mehakare <aditya.mehakare@nutanix.com>\nAcked-by: Naveen Yerramneni <naveen.yerramneni@nutanix.com>\nAcked-by: Mark Michelson <mmichels@redhat.com>\n---\n ovn-nb.ovsschema          | 10 +++++---\n ovn-nb.xml                |  5 ++++\n tests/ovn-nbctl.at        | 48 +++++++++++++++++++++++++++------------\n tests/ovn-northd.at       |  8 +++----\n tests/ovn.at              |  6 ++---\n tests/system-ovn.at       |  4 ++--\n utilities/ovn-nbctl.8.xml | 19 ++++++++--------\n utilities/ovn-nbctl.c     | 25 +++++++++++++++-----\n 8 files changed, 84 insertions(+), 41 deletions(-)",
    "diff": "diff --git a/ovn-nb.ovsschema b/ovn-nb.ovsschema\nindex 8c2c1d861..2c60d000c 100644\n--- a/ovn-nb.ovsschema\n+++ b/ovn-nb.ovsschema\n@@ -1,7 +1,7 @@\n {\n     \"name\": \"OVN_Northbound\",\n-    \"version\": \"7.15.0\",\n-    \"cksum\": \"4060410729 43708\",\n+    \"version\": \"7.16.0\",\n+    \"cksum\": \"3182666148 43912\",\n     \"tables\": {\n         \"NB_Global\": {\n             \"columns\": {\n@@ -213,10 +213,14 @@\n                             \"refTable\": \"Network_Function_Health_Check\",\n                             \"refType\": \"strong\"},\n                     \"min\": 0, \"max\": 1}},\n+                \"id\": {\n+                     \"type\": {\"key\": {\"type\": \"integer\",\n+                                      \"minInteger\": 1,\n+                                      \"maxInteger\": 255}}},\n                 \"external_ids\": {\n                     \"type\": {\"key\": \"string\", \"value\": \"string\",\n                              \"min\": 0, \"max\": \"unlimited\"}}},\n-            \"indexes\": [[\"name\"]],\n+            \"indexes\": [[\"name\"], [\"id\"]],\n             \"isRoot\": true},\n         \"Network_Function_Group\": {\n             \"columns\": {\ndiff --git a/ovn-nb.xml b/ovn-nb.xml\nindex aab091883..252ac740e 100644\n--- a/ovn-nb.xml\n+++ b/ovn-nb.xml\n@@ -6429,6 +6429,11 @@ or\n       Name of the <ref table=\"Network_Function\"/>. Name should be unique.\n     </column>\n \n+    <column name=\"id\">\n+      A unique integer between 1 and 255 must be assigned to each\n+      <code>Network_Function</code>.\n+    </column>\n+\n     <column name=\"inport\">\n       <ref table=\"Logical_Switch_Port\"/>  where request traffic for from-lport\n       ACL and response traffic for to-lport ACL is redirected.\ndiff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at\nindex dccf30758..f4cb89b82 100644\n--- a/tests/ovn-nbctl.at\n+++ b/tests/ovn-nbctl.at\n@@ -3245,13 +3245,13 @@ AT_CHECK([check ovn-nbctl set logical_switch_port svc-port1 \\\n     options:is-nf=true options:nf-linked-port=svc-port0])\n \n # Create network-function.\n-AT_CHECK([ovn-nbctl nf-add nf0 svc-port0 svc-port1])\n-AT_CHECK([ovn-nbctl nf-add nf0 svc-port0 svc-port1], [1], [],\n+AT_CHECK([ovn-nbctl nf-add nf0 1 svc-port0 svc-port1])\n+AT_CHECK([ovn-nbctl nf-add nf0 1 svc-port0 svc-port1], [1], [],\n   [ovn-nbctl: nf0: same name network-function already exists\n ])\n-AT_CHECK([ovn-nbctl --may-exist nf-add nf0 svc-port0 svc-port1])\n+AT_CHECK([ovn-nbctl --may-exist nf-add nf0 1 svc-port0 svc-port1])\n AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [dnl\n-<0> (nf0) in:svc-port0 out:svc-port1\n+<0> (nf0) id:1 in:svc-port0 out:svc-port1\n ])\n \n # Test --may-exist overwrite behavior: update existing network function with new ports\n@@ -3263,25 +3263,25 @@ AT_CHECK([check ovn-nbctl set logical_switch_port svc-port4 \\\n AT_CHECK([check ovn-nbctl set logical_switch_port svc-port5 \\\n     options:receive_multicast=false options:lsp_learn_fdb=false \\\n     options:is-nf=true options:nf-linked-port=svc-port4])\n-AT_CHECK([ovn-nbctl --may-exist nf-add nf0 svc-port4 svc-port5])\n+AT_CHECK([ovn-nbctl --may-exist nf-add nf0 1 svc-port4 svc-port5])\n AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [dnl\n-<0> (nf0) in:svc-port4 out:svc-port5\n+<0> (nf0) id:1 in:svc-port4 out:svc-port5\n ])\n \n # Create two more network-functions, one with same inport and outport.\n AT_CHECK([check ovn-nbctl lsp-add ls0 svc-port2])\n AT_CHECK([check ovn-nbctl lsp-add ls0 svc-port3])\n-AT_CHECK([ovn-nbctl nf-add nf1 svc-port2 svc-port3])\n+AT_CHECK([ovn-nbctl nf-add nf1 2 svc-port2 svc-port3])\n AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [dnl\n-<0> (nf0) in:svc-port4 out:svc-port5\n-<1> (nf1) in:svc-port2 out:svc-port3\n+<0> (nf0) id:1 in:svc-port4 out:svc-port5\n+<1> (nf1) id:2 in:svc-port2 out:svc-port3\n ])\n \n-AT_CHECK([ovn-nbctl nf-add nf2 svc-port2 svc-port2])\n+AT_CHECK([ovn-nbctl nf-add nf2 3 svc-port2 svc-port2])\n AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [dnl\n-<0> (nf0) in:svc-port4 out:svc-port5\n-<1> (nf1) in:svc-port2 out:svc-port3\n-<2> (nf2) in:svc-port2 out:svc-port2\n+<0> (nf0) id:1 in:svc-port4 out:svc-port5\n+<1> (nf1) id:2 in:svc-port2 out:svc-port3\n+<2> (nf2) id:3 in:svc-port2 out:svc-port2\n ])\n \n # Create a network-function-group.\n@@ -3334,10 +3334,30 @@ AT_CHECK([ovn-nbctl nfg-list | uuidfilt], [0], [])\n AT_CHECK([ovn-nbctl nf-del nf1])\n AT_CHECK([ovn-nbctl nf-del nf0])\n AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [dnl\n-<0> (nf2) in:svc-port2 out:svc-port2\n+<0> (nf2) id:3 in:svc-port2 out:svc-port2\n ])\n AT_CHECK([ovn-nbctl nf-del nf2])\n AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [])\n+\n+# Test ID validation and uniqueness\n+AT_CHECK([check ovn-nbctl lsp-add ls0 svc-port6])\n+AT_CHECK([check ovn-nbctl lsp-add ls0 svc-port7])\n+# Test invalid ID (out of range)\n+AT_CHECK([ovn-nbctl nf-add nf3 0 svc-port6 svc-port7], [1], [],\n+  [ovn-nbctl: network-function id must be between 1 and 255\n+])\n+AT_CHECK([ovn-nbctl nf-add nf3 256 svc-port6 svc-port7], [1], [],\n+  [ovn-nbctl: network-function id must be between 1 and 255\n+])\n+AT_CHECK([ovn-nbctl nf-add nf3 abc svc-port6 svc-port7], [1], [],\n+  [ovn-nbctl: network-function id must be between 1 and 255\n+])\n+# Test valid ID\n+AT_CHECK([ovn-nbctl nf-add nf3 10 svc-port6 svc-port7])\n+AT_CHECK([ovn-nbctl nf-list | uuidfilt], [0], [dnl\n+<0> (nf3) id:10 in:svc-port6 out:svc-port7\n+])\n+AT_CHECK([ovn-nbctl nf-del nf3])\n ])\n \n AT_SETUP([ovn-nbctl - TLS server name indication (SNI) with --ssl-server-name])\ndiff --git a/tests/ovn-northd.at b/tests/ovn-northd.at\nindex aeb07f1dd..4cbd89e92 100644\n--- a/tests/ovn-northd.at\n+++ b/tests/ovn-northd.at\n@@ -18609,7 +18609,7 @@ check ovn-nbctl set logical_switch_port sw0-nf-p1 \\\n check ovn-nbctl set logical_switch_port sw0-nf-p2 \\\n     options:receive_multicast=false options:lsp_learn_mac=false \\\n     options:is-nf=true options:nf-linked-port=sw0-nf-p1\n-check ovn-nbctl nf-add nf0 sw0-nf-p1 sw0-nf-p2\n+check ovn-nbctl nf-add nf0 1 sw0-nf-p1 sw0-nf-p2\n check ovn-nbctl nfg-add nfg0 1 inline nf0\n \n check ovn-nbctl lsp-add sw0 sw0-p1 -- lsp-set-addresses sw0-p1 \"00:00:00:00:00:01 10.0.0.2\"\n@@ -18722,7 +18722,7 @@ check ovn-nbctl set logical_switch_port sw0-nf-p3 \\\n check ovn-nbctl set logical_switch_port sw0-nf-p4 \\\n     options:receive_multicast=false options:lsp_learn_mac=false \\\n     options:is-nf=true options:nf-linked-port=sw0-nf-p3\n-check ovn-nbctl nf-add nf1 sw0-nf-p3 sw0-nf-p4\n+check ovn-nbctl nf-add nf1 2 sw0-nf-p3 sw0-nf-p4\n check ovn-nbctl nfg-add nfg1 2 inline nf1\n check ovn-nbctl acl-add pg0 to-lport 1003 \"outport == @pg0 && ip4.src == 10.0.0.4\" allow-related nfg1\n check ovn-sbctl lsp-bind sw0-nf-p3 hv1\n@@ -18900,8 +18900,8 @@ check ovn-nbctl set logical_switch_port $nfsw-p4 \\\n     options:receive_multicast=false options:lsp_learn_fdb=false \\\n     options:is-nf=true options:nf-linked-port=$nfsw-p3\n \n-check ovn-nbctl nf-add nf0 $nfsw-p1 $nfsw-p2\n-check ovn-nbctl nf-add nf1 $nfsw-p3 $nfsw-p4\n+check ovn-nbctl nf-add nf0 1 $nfsw-p1 $nfsw-p2\n+check ovn-nbctl nf-add nf1 2 $nfsw-p3 $nfsw-p4\n nf0_uuid=$(fetch_column nb:network_function _uuid name=nf0)\n nf1_uuid=$(fetch_column nb:network_function _uuid name=nf1)\n AT_CHECK(\ndiff --git a/tests/ovn.at b/tests/ovn.at\nindex 802e6d0da..941081f9a 100644\n--- a/tests/ovn.at\n+++ b/tests/ovn.at\n@@ -36257,7 +36257,7 @@ check ovs-vsctl add-port br-int ls0-hv -- set Interface ls0-hv external-ids:ifac\n check ovn-nbctl lr-add lr0\n \n check ovn-nbctl ls-add ls0\n-check ovn-nbctl lsp-add ls0 ls0-lr0 \n+check ovn-nbctl lsp-add ls0 ls0-lr0\n check ovn-nbctl lsp-set-type ls0-lr0 router\n check ovn-nbctl lsp-set-addresses ls0-lr0 router\n check ovn-nbctl lrp-add lr0 lr0-ls0 00:00:00:00:00:01 10.0.0.1\n@@ -44005,7 +44005,7 @@ create_logical_topology() {\n     check ovn-nbctl set logical_switch_port $sw-nf-p2 \\\n         options:receive_multicast=false options:lsp_learn_mac=false \\\n         options:is-nf=true options:nf-linked-port=$sw-nf-p1\n-    check ovn-nbctl nf-add nf0 $sw-nf-p1 $sw-nf-p2\n+    check ovn-nbctl nf-add nf0 1 $sw-nf-p1 $sw-nf-p2\n     check ovn-nbctl nfg-add nfg0 1 inline nf0\n     check ovn-nbctl pg-add pg0 $sw-p1\n     check ovn-nbctl acl-add pg0 from-lport 1002 \"inport == @pg0 && ip4.dst == 192.168.0.12\" allow-related nfg0\n@@ -44195,7 +44195,7 @@ create_logical_topology() {\n     check ovn-nbctl set logical_switch_port $sw-nf-p2 \\\n         options:receive_multicast=false options:lsp_learn_mac=false \\\n         options:is-nf=true options:nf-linked-port=$sw-nf-p1\n-    check ovn-nbctl nf-add nf0 $sw-nf-p1 $sw-nf-p2\n+    check ovn-nbctl nf-add nf0 1 $sw-nf-p1 $sw-nf-p2\n     check ovn-nbctl nfg-add nfg0 1 inline nf0\n     check ovn-nbctl pg-add pg0 $sw-p1\n     check ovn-nbctl acl-add pg0 to-lport 1002 \"outport == @pg0 && ip4.src == 192.168.0.12\" allow-related nfg0\ndiff --git a/tests/system-ovn.at b/tests/system-ovn.at\nindex c732af9b9..a478dd709 100644\n--- a/tests/system-ovn.at\n+++ b/tests/system-ovn.at\n@@ -19933,7 +19933,7 @@ check ovn-nbctl set logical_switch_port child-4 options:receive_multicast=false\n \n AS_BOX([Test-1: Single NF without health check])\n \n-check ovn-nbctl nf-add nf0 nf-p1 nf-p2\n+check ovn-nbctl nf-add nf0 1 nf-p1 nf-p2\n nf0_uuid=$(fetch_column nb:network_function _uuid name=nf0)\n check ovn-nbctl nfg-add nfg0 1 inline nf0\n nfg_uuid=$(fetch_column nb:network_function_group _uuid name=nfg0)\n@@ -20035,7 +20035,7 @@ validate_single_nf_no_health_check \"server\" \"client\" \"192.168.1.10\" \"Outbound\"\n AS_BOX([Test-2: Two NFs with health check config enabled])\n \n # Add second NF\n-check ovn-nbctl nf-add nf1 nf-p3 nf-p4\n+check ovn-nbctl nf-add nf1 2 nf-p3 nf-p4\n nf1_uuid=$(fetch_column nb:network_function _uuid name=nf1)\n \n # Add bridge for nf1\ndiff --git a/utilities/ovn-nbctl.8.xml b/utilities/ovn-nbctl.8.xml\nindex 7df902944..253f6d8fc 100644\n--- a/utilities/ovn-nbctl.8.xml\n+++ b/utilities/ovn-nbctl.8.xml\n@@ -475,16 +475,17 @@\n     <h2>Network Function Commands</h2>\n \n     <dl>\n-      <dt>[<code>--may-exist</code>] <code>nf-add</code> <var>nf</var> <var>inport</var> <var>outport</var></dt>\n+      <dt>[<code>--may-exist</code>] <code>nf-add</code> <var>nf</var> <var>id</var> <var>inport</var> <var>outport</var></dt>\n       <dd>\n         <p>\n-          Creates a new network function named <var>nf</var> with logical\n-          switch ports <var>inport</var> and <var>outport</var>. Both the\n-          ports must be on the same logical switch and must be already\n-          created. When used in an ACL action, traffic matching the ACL\n-          are redirected to the <var>inport</var> if it is from-lport ACL\n-          and to the <var>outport</var> if it is to-lport ACL. The response\n-          packets are sent through the same ports in reverse order.\n+          Creates a new network function named <var>nf</var> with the specified\n+          <var>id</var> (an integer between 1 and 255) and logical switch ports\n+          <var>inport</var> and <var>outport</var>. Both the ports must be on\n+          the same logical switch and must be already created. When used in an\n+          ACL action, traffic matching the ACL are redirected to the\n+          <var>inport</var> if it is from-lport ACL and to <var>outport</var>\n+          if it is to-lport ACL. The response packets are sent through the same\n+          ports in reverse order.\n         </p>\n \n         <p>\n@@ -1498,7 +1499,7 @@\n          The optional argument <var>protocol</var> must be either\n          <code>tcp</code>,  <code>udp</code> or <code>sctp</code>. This argument\n          is useful when a port number is provided as part of the <var>vip</var>.\n-         If the <var>protocol</var> is unspecified and a port number is provided \n+         If the <var>protocol</var> is unspecified and a port number is provided\n          as part of the <var>vip</var>, OVN assumes the <var>protocol</var> to\n          be <code>tcp</code>.\n         </p>\ndiff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c\nindex cdf6b578a..2b674cad3 100644\n--- a/utilities/ovn-nbctl.c\n+++ b/utilities/ovn-nbctl.c\n@@ -393,7 +393,7 @@ Network function group commands:\\n\\\n                             network-function-group\\n\\\n \\n\\\n Network function commands:\\n\\\n-  nf-add NETWORK-FUNCTION PORT-IN PORT-OUT\\n\\\n+  nf-add NETWORK-FUNCTION ID PORT-IN PORT-OUT\\n\\\n                            create a network-function\\n\\\n   nf-del NETWORK-FUNCTION  delete a network-function\\n\\\n   nf-list                  print all network-functions\\n\\\n@@ -2483,6 +2483,7 @@ nbctl_pre_nf_add(struct ctl_context *ctx)\n \n     ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_port_col_name);\n     ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_name);\n+    ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_id);\n     ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_inport);\n     ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_outport);\n }\n@@ -2495,17 +2496,25 @@ nbctl_nf_add(struct ctl_context *ctx)\n \n     bool may_exist = shash_find(&ctx->options, \"--may-exist\") != NULL;\n \n-    char * error = lsp_by_name_or_uuid(ctx, ctx->argv[2], true, &lsp_in);\n+    char * error = lsp_by_name_or_uuid(ctx, ctx->argv[3], true, &lsp_in);\n     if (error) {\n         ctx->error = error;\n         return;\n     }\n-    error = lsp_by_name_or_uuid(ctx, ctx->argv[3], true, &lsp_out);\n+    error = lsp_by_name_or_uuid(ctx, ctx->argv[4], true, &lsp_out);\n     if (error) {\n         ctx->error = error;\n         return;\n     }\n \n+    /* Validate and parse ID */\n+    int64_t nf_id = 0;\n+    if (!ovs_scan(ctx->argv[2], \"%\"SCNd64, &nf_id)\n+            || nf_id < 1 || nf_id > 255) {\n+        ctl_error(ctx, \"network-function id must be between 1 and 255\");\n+        return;\n+    }\n+\n     const char *nf_name = ctx->argv[1];\n \n     /* Check if network function already exists */\n@@ -2528,6 +2537,9 @@ nbctl_nf_add(struct ctl_context *ctx)\n         nbrec_network_function_set_name(nf, nf_name);\n     }\n \n+    /* Set ID */\n+    nbrec_network_function_set_id(nf, nf_id);\n+\n     /* Set/update the ports */\n     nbrec_network_function_set_inport(nf, lsp_in);\n     nbrec_network_function_set_outport(nf, lsp_out);\n@@ -2560,6 +2572,7 @@ static void\n nbctl_pre_nf_list(struct ctl_context *ctx)\n {\n     ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_name);\n+    ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_id);\n     ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_inport);\n     ovsdb_idl_add_column(ctx->idl, &nbrec_network_function_col_outport);\n     ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_port_col_name);\n@@ -2577,9 +2590,9 @@ nbctl_nf_list(struct ctl_context *ctx)\n         const char *linport_name = linport ? linport->name : \"<not_set>\";\n         const char *loutport_name = loutport ? loutport->name : \"<not_set>\";\n         smap_add_format(&nfs, nf->name,\n-                        UUID_FMT \" (%s) in:%s out:%s\",\n+                        UUID_FMT \" (%s) id:%\"PRId64\" in:%s out:%s\",\n                         UUID_ARGS(&nf->header_.uuid),\n-                        nf->name, linport_name, loutport_name);\n+                        nf->name, nf->id, linport_name, loutport_name);\n     }\n     const struct smap_node **nodes = smap_sort(&nfs);\n     for (size_t i = 0; i < smap_count(&nfs); i++) {\n@@ -8877,7 +8890,7 @@ static const struct ctl_command_syntax nbctl_commands[] = {\n       nbctl_nf_group_del_network_function, NULL, \"--if-exists\", RW },\n \n     /* network-function commands. */\n-    { \"nf-add\", 3, 3, \"NETWORK-FUNCTION PORT-IN PORT-OUT\",\n+    { \"nf-add\", 4, 4, \"NETWORK-FUNCTION ID PORT-IN PORT-OUT\",\n       nbctl_pre_nf_add,\n       nbctl_nf_add,\n       NULL, \"--may-exist\", RW },\n",
    "prefixes": [
        "ovs-dev",
        "v4",
        "1/2"
    ]
}