{"id":471720,"date":"2025-08-23T15:01:54","date_gmt":"2025-08-23T15:01:54","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=471720"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=471720","title":{"rendered":"<span>\u041c\u0430\u0433\u0438\u044f binapi \u0434\u043b\u044f VPP \u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e SR Policy<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/df6\/173\/da2\/df6173da2a3e9ce1c9fe24a2a34e9926.jpg\" width=\"1920\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/df6\/173\/da2\/df6173da2a3e9ce1c9fe24a2a34e9926.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/df6\/173\/da2\/df6173da2a3e9ce1c9fe24a2a34e9926.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0411\u043e\u0440\u0438\u0441 \u0425\u0430\u0441\u0430\u043d\u043e\u0432, \u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u0432 <a href=\"https:\/\/mws.ru\/cloud-platform\/?utm_source=habr_hub&amp;utm_campaign=mwscloudplatform&amp;utm_term=article936840\" rel=\"noopener noreferrer nofollow\">MWS Cloud Platform<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 binapi, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f VPP \u0441 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c binapi \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0432 \u0426\u041e\u0414 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e Traffic Engineering \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 VPP. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e SR Policy \u0447\u0435\u0440\u0435\u0437 VPP. \u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 SR Policy, \u0430\u0434\u0440\u0435\u0441\u0443\u044e \u043a \u0441\u0432\u043e\u0435\u0439<a href=\"https:\/\/habr.com\/p\/816439\/\" rel=\"noopener noreferrer nofollow\"> \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.  <\/p>\n<p>\u0425\u043e\u0447\u0443 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c-\u0441\u043e\u0430\u0432\u0442\u043e\u0440\u0430\u043c \u0438\u0437 MWS, \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0432\u0448\u0438\u043c \u043c\u043d\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u2014 \u044d\u0442\u043e \u0420\u0443\u0441\u043b\u0430\u043d \u0418\u0431\u0440\u0430\u0433\u0438\u043c\u043e\u0432, \u0410\u0440\u0442\u0451\u043c \u0413\u043b\u0430\u0437\u044b\u0447\u0435\u0432, \u041c\u0438\u0445\u0430\u0438\u043b \u0421\u043e\u043a\u043e\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0438 \u041f\u0430\u0432\u0435\u043b \u0422\u043a\u0430\u0447. \u0422\u0430\u043a\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438\u0437 MWS, \u043a\u0442\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u043b \u043c\u043d\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439.  <\/p>\n<h2>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043f\u0440\u043e VPP  <\/h2>\n<p>\u0415\u0441\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 <a href=\"https:\/\/wiki.fd.io\/view\/VPP\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u043f\u043e VPP (Vector Packet Processing \u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0430\u0434\u0438\u043c \u043b\u0438\u0448\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0443\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>VPP \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (\u0432\u0435\u043a\u0442\u043e\u0440 \u2014 \u043c\u0430\u0441\u0441\u0438\u0432). \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441\u043c. <a href=\"https:\/\/s3-docs.fd.io\/vpp\/25.10\/aboutvpp\/scalar-vs-vector-packet-processing.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>) \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0434\u0430:<\/p>\n<ul>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, quad-loop \u0434\u043b\u044f 4 \u043f\u0430\u043a\u0435\u0442\u043e\u0432). \u042d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 IPC (instructions per cycle) \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e, \u0447\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0438 \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043a\u0435\u0448\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 (inline) \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0445\u043e\u0436\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445\u00a0 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 (NPU), \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043e\u0432 (pipeline).<\/p>\n<p>VPP \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u00ab\u0433\u0440\u0430\u0444\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u00bb. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0433\u0440\u0430\u0444 \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c <strong>\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432<\/strong>, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b VPP \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442:<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u0433\u0440\u0430\u0444\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0433\u0440\u0430\u0444\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 VPP (\u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b).<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c VPP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 DPDK.<\/p>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 VPP \u0432 MWS  <\/h2>\n<p>\u0412 MWS \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c VPP \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 SRv6 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u043a\u0430 MWS Cloud Platform. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043d\u0435\u0451 <a href=\"https:\/\/www.youtube.com\/watch?v=ZmKNTSYWAuE\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043c\u043e\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0432 6-\u043c \u044d\u043f\u0438\u0437\u043e\u0434\u0435 \u0440\u0435\u0430\u043b\u0438\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Building the Cloud<\/a>.  <\/p>\n<p>\u041e\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0432\u0443\u0445 \u0412\u041c. \u0418\u0442\u0430\u043a, \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (CPL) \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 API \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0433\u0435\u043d\u0442 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b SR Policy, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0412\u041c \u043a \u0434\u0440\u0443\u0433\u043e\u0439: Binding SID, Endpoint, Segment List (\u0434\u0430\u043b\u0435\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0431\u0443\u0434\u0443 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u2014 SL), \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e END.SID \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u0412\u041c. \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0433\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 SR Policy (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442) VPP \u0447\u0435\u0440\u0435\u0437 binapi, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0438\u0436\u0435. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u0440\u0438\u0441. 1. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e CPL \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VPN \u0438 \u0441\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0432 VPN: \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0445 \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0430\u0433\u0435\u043d\u0442\u0443, \u0430 \u0442\u043e\u0442 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 VPP.  <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/75b\/7c0\/774\/75b7c0774a5b7aada67d0e7f83a0848d.jpg\" alt=\"\u0420\u0438\u0441. 1. \u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SRv6 Overlay \u043d\u0430 \u0431\u0430\u0437\u0435 SR Policy \u0432 \u0441\u0435\u0442\u0438 MWS  \" title=\"\u0420\u0438\u0441. 1. \u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SRv6 Overlay \u043d\u0430 \u0431\u0430\u0437\u0435 SR Policy \u0432 \u0441\u0435\u0442\u0438 MWS  \" width=\"1920\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/75b\/7c0\/774\/75b7c0774a5b7aada67d0e7f83a0848d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/75b\/7c0\/774\/75b7c0774a5b7aada67d0e7f83a0848d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 1. \u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SRv6 Overlay \u043d\u0430 \u0431\u0430\u0437\u0435 SR Policy \u0432 \u0441\u0435\u0442\u0438 MWS  <\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SR Policy \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b PCEP \u0438 BGP SR (\u043e\u043d\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u0441\u043c. \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u044b\u0448\u0435). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e gRPC \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 (\u0441\u043c.<a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-ali-spring-sr-policy-programming-rpc\/\" rel=\"noopener noreferrer nofollow\"> draft-ali-spring-sr-policy-programming-rpc<\/a>). VPP \u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 API, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SR Policy, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 binapi \u0432 VPP \u0442\u0430\u043a \u0432\u0430\u0436\u0435\u043d? \u0414\u043b\u044f SR Policy, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u0432\u0430\u0436\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b PCEP \u0438 BGP SR \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 control plane \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0430 VPP \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433\u0430, \u0442. \u0435. \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 SR Policy. \u0422\u0430\u043a\u0436\u0435 binapi \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439) \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043e \u0447\u0451\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c API VPP.<\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 API VPP  <\/h2>\n<p>VPP \u0438\u043c\u0435\u0435\u0442 API-\u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 VPP \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0441\u043e\u043a\u0435\u0442), \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:\u00a0<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0431\u0449\u0438\u0439 \u043a\u043e\u0434<\/strong> (common code) \u2014 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/strong> (generated code) \u2014 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API (\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438).<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430<\/strong> (code generator) \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>API \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445:<\/p>\n<ul>\n<li>\n<p><strong>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439<\/strong>. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0435\u0451 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439<\/strong>. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0API VPP \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 \u0441 gRPC (\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f API).<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 binapi \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C, C++, Go. \u0414\u0430\u043b\u0435\u0435 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 <a href=\"https:\/\/s3-docs.fd.io\/vpp\/23.06\/interfacing\/go\/index.html\" rel=\"noopener noreferrer nofollow\">Go<\/a> (Go API \u0438\u043b\u0438 go-vpp \u043d\u0430 \u0440\u0438\u0441. 2):<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/647\/6dd\/640\/6476dd640724b935db427115a44d1462.jpg\" alt=\"\u0420\u0438\u0441. 2. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 VPP \u043f\u043e binapi  \" title=\"\u0420\u0438\u0441. 2. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 VPP \u043f\u043e binapi  \" width=\"1920\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/647\/6dd\/640\/6476dd640724b935db427115a44d1462.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/647\/6dd\/640\/6476dd640724b935db427115a44d1462.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 2. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 VPP \u043f\u043e binapi  <\/figcaption><\/div>\n<\/figure>\n<h3>\u0422\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 binapi  <\/h3>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f binapi. \u0412\u0438\u0434\u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0441 gRPC (\u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 gRPC <a href=\"https:\/\/habr.com\/p\/885622\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>).<\/p>\n<ol>\n<li>\n<p>Request (\u0437\u0430\u043f\u0440\u043e\u0441) \u2014 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>Dump \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432);<\/p>\n<\/li>\n<li>\n<p>Detail \u2014 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0443;<\/p>\n<\/li>\n<li>\n<p>Subs \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 rpc:Subscribe \u0432 gNMI);<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u0432 \u0442. \u0447. events \u2014 \u043a\u0430\u043a \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435).<\/p>\n<\/li>\n<\/ol>\n<p>\u041b\u043e\u0433\u0438\u043a\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u0440\u0438\u0441. 3<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d00\/26b\/798\/d0026b798fbbfcbe3aaf594b95eca3a6.jpg\" alt=\"\u0420\u0438\u0441. 3. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f binapi  \" title=\"\u0420\u0438\u0441. 3. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f binapi  \" width=\"1920\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d00\/26b\/798\/d0026b798fbbfcbe3aaf594b95eca3a6.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d00\/26b\/798\/d0026b798fbbfcbe3aaf594b95eca3a6.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 3. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f binapi  <\/figcaption><\/div>\n<\/figure>\n<h3>\u0426\u0435\u043b\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f  <\/h3>\n<p>\u041c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438\u00a0 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SR Policy \u0432 MWS, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u043d\u0433\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 SID \u0432 SL, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432\/\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u043c (\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f BGP Best-Path\u00a0 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430), \u0430 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0438\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u043d\u0433\u0430 \u0432 SR Policy (\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u2014 \u0432 Candidate Path \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 SR Policy: \u0441\u043c. \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043c\u043e\u044e \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u044b\u0448\u0435 \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439) \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 SL \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0441\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 (wECMP).<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412 MWS \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043a VPP c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438. \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 <a href=\"http:\/\/gen.sh\" rel=\"noopener noreferrer nofollow\">gen.sh<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<\/p>\n<ol>\n<li>\n<p>\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f: \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438, \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f VPP, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 binapi (\u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u2014 plugins.txt);<\/p>\n<\/li>\n<li>\n<p>\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 vpp (\u0441 \u0433\u0438\u0442\u0430\u00a0 \u043b\u0438\u0431\u043e \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430);<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 binapi;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b (\u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 plugins.txt);<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a vpp.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0434 <a href=\"http:\/\/gen.sh\" rel=\"noopener noreferrer nofollow\">gen.sh<\/a>  <\/p>\n<pre><code>$ cat go\/src\/srv6-vpp\/scripts\/gen.sh #!\/bin\/bash # scripts\/govpp\/gen.sh   # Enable debugging and exit immediately if a command exits with a non-zero status set -euxo pipefail   # Specify source and destination paths INPUT_DIR=\"\/usr\/share\/vpp\/api\" # \u0412 OUTPUT_DIR \u0431\u0443\u0434\u0435\u0442 \u0413\u043e\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f SR API OUTPUT_DIR=\".\/vpp\/binapi\/\" VPP_REPO=\"git@git.mws-team.ru:mws\/network\/FDio\/vpp.git\"   # Define an array of desired plugins DESIRED_PLUGINS=$(cat scripts\/plugins.txt)   # Function to clean previously generated clients clean_output_dir() {   echo \"Cleaning previously generated clients...\"   rm -rf ${OUTPUT_DIR} }   # Function to clone the VPP repository and generate govpp binapi clone_and_generate() {   echo \"Cloning VPP repository and generating govpp binapi...\" #  git clone  ${VPP_REPO}   binapi-generator --input-dir=${INPUT_DIR} --output-dir=${OUTPUT_DIR} }   # Function to remove unused generated code remove_unused_generated_code() {   echo \"Removing unused generated code...\"   TMP_DIR=$(mktemp -d)     for PLUGIN in ${DESIRED_PLUGINS[@]}; do if [ -d ${OUTPUT_DIR}${PLUGIN} ]; then   mv ${OUTPUT_DIR}${PLUGIN} ${TMP_DIR} fi   done     rm -rf ${OUTPUT_DIR}*\/   mv ${TMP_DIR}\/* ${OUTPUT_DIR}   rmdir ${TMP_DIR} }   # Function to remove the VPP repository clean_vpp_repo() {   echo \"Removing VPP repository...\"   rm -rf ${INPUT_DIR} }   # Main process main() {   clean_output_dir   clone_and_generate   remove_unused_generated_code  # clean_vpp_repo   echo \"Done!\" }   # Call the main function main<\/code><\/pre>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b binapi, \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 plugins.txt. \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u043d\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 SR Policy.<\/p>\n<pre><code>bhassanov@cali-11:~$ cat go\/src\/srv6-vpp\/scripts\/plugins.txt interface interface_types ip ip_types sr<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b binapi \u043d\u0430 Go \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0435 \u043d\u0438\u0436\u0435 1.23.<br \/><a href=\"http:\/\/Gen.sh\" rel=\"noopener noreferrer nofollow\">Gen.sh<\/a> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 binapi, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438\u0437 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f vpp \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 json-\u0444\u0430\u0439\u043b\u044b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c API, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 ply \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043d\u0430 Go \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c API.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 binapi \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>:~\/go\/src\/srv6$ go install go.fd.io\/govpp\/cmd\/binapi-generator@latest go: downloading github.com\/sirupsen\/logrus v1.9.3 go: downloading github.com\/spf13\/pflag v1.0.6 go: downloading golang.org\/x\/text v0.24.0 go: downloading github.com\/bennyscetbun\/jsongo v1.1.2 go: downloading golang.org\/x\/sys v0.31.0 # go.fd.io\/govpp\/cmd\/binapi-generator \/usr\/local\/go\/pkg\/tool\/linux_amd64\/link: running gcc failed: exit status 1 \/usr\/bin\/gcc -m64 -Wl,-z,now -Wl,-z,nocopyreloc -o $WORK\/b001\/exe\/a.out -rdynamic \/tmp\/go-link-2754728408\/go.o \/tmp\/go-link-2754728408\/000000.o \/tmp\/go-link-2754728408\/000001.o \/tmp\/go-link-2754728408\/000002.o \/tmp\/go-link-2754728408\/000003.o \/tmp\/go-link-2754728408\/000004.o \/tmp\/go-link-2754728408\/000005.o \/tmp\/go-link-2754728408\/000006.o \/tmp\/go-link-2754728408\/000007.o \/tmp\/go-link-2754728408\/000008.o \/tmp\/go-link-2754728408\/000009.o \/tmp\/go-link-2754728408\/000010.o \/tmp\/go-link-2754728408\/000011.o \/tmp\/go-link-2754728408\/000012.o \/tmp\/go-link-2754728408\/000013.o \/tmp\/go-link-2754728408\/000014.o \/tmp\/go-link-2754728408\/000015.o \/tmp\/go-link-2754728408\/000016.o \/tmp\/go-link-2754728408\/000017.o \/tmp\/go-link-2754728408\/000018.o \/tmp\/go-link-2754728408\/000019.o \/tmp\/go-link-2754728408\/000020.o \/tmp\/go-link-2754728408\/000021.o \/tmp\/go-link-2754728408\/000022.o \/tmp\/go-link-2754728408\/000023.o \/tmp\/go-link-2754728408\/000024.o -O2 -g -lresolv -O2 -g -ldl -O2 -g -lpthread -O2 -g \/usr\/bin\/ld: cannot find crtbeginS.o: No such file or directory collect2: error: ld returned 1 exit status<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code>:~\/go\/src\/srv6$ echo $PATH \/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin:\/usr\/games:\/usr\/local\/games:\/snap\/bin:\/usr\/local\/go\/bin:\/usr\/local\/go\/bin bhassanov@cali-11:~\/go\/src\/srv6$ find \/usr\/lib -name \"crtbeginS.o\" \/usr\/lib\/gcc\/x86_64-linux-gnu\/12\/crtbeginS.o :~\/go\/src\/srv6$ export LIBRARY_PATH=\/usr\/lib\/gcc\/x86_64-linux-gnu\/12:$LIBRARY_PATH &lt;== \u0432\u043e\u0442 \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 ~\/go\/src\/srv6$ go install go.fd.io\/govpp\/cmd\/binapi-generator@v0.12.0 ~\/go\/src\/srv6$<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <a href=\"http:\/\/gen.sh\" rel=\"noopener noreferrer nofollow\">gen.sh<\/a> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 Python-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0440\u043e\u0438\u043d\u0441\u0442\u0430\u043b\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 ply:  <\/p>\n<pre><code>:~\/go\/src\/srv6$ mkdir -p .venv ~\/go\/src\/srv6$ python3 -m venv .venv The virtual environment was not created successfully because ensurepip is not available.  On Debian\/Ubuntu systems, you need to install the python3-venv package using the following command.       apt install python3.10-venv   You may need to use sudo with that command.  After installing the python3-venv package, recreate your virtual environment.   Failing command: \/home\/bhassanov\/go\/src\/srv6\/.venv\/bin\/python3   :~\/go\/src\/srv6$ sudo apt install python3.10-venv Reading package lists... Done Building dependency tree... Done Reading state information... Done [SNIP]   :~\/go\/src\/srv6$ python3 -m venv .venv ~\/go\/src\/srv6$ . .venv\/bin\/activate (.venv) :~\/go\/src\/srv6$ pip3 install ply Collecting ply   Downloading ply-3.11-py2.py3-none-any.whl (49 kB)      \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 49.6\/49.6 KB 732.2 kB\/s eta 0:00:00 Installing collected packages: ply Successfully installed ply-3.11<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <a href=\"http:\/\/gen.sh\" rel=\"noopener noreferrer nofollow\">gen.sh<\/a>:  <\/p>\n<pre><code>(.venv) :~\/go\/src\/srv6$ .\/scripts\/gen.sh + INPUT_DIR=.\/vpp\/ + OUTPUT_DIR=.\/vpp\/binapi\/ + VPP_REPO=git@git.mws-team.ru:mws\/network\/FDio\/vpp.git ++ cat scripts\/plugins.txt + DESIRED_PLUGINS='interface interface_types ip ip_typess sr sr_types' + main + clean_output_dir + echo 'Cleaning previously generated clients...' Cleaning previously generated clients... + rm -rf .\/vpp\/binapi\/ + clone_and_generate + echo 'Cloning VPP repository and generating govpp binapi...' Cloning VPP repository and generating govpp binapi... + binapi-generator --input=.\/vpp\/ --output-dir=.\/vpp\/binapi\/ INFO[0001] Generating 258 files                          + remove_unused_generated_code + echo 'Removing unused generated code...' Removing unused generated code... ++ mktemp -d + TMP_DIR=\/tmp\/tmp.LzgPWLRRWN + for PLUGIN in ${DESIRED_PLUGINS[@]}  [SNIP] + mv \/tmp\/tmp.LzgPWLRRWN\/interface \/tmp\/tmp.LzgPWLRRWN\/interface_types \/tmp\/tmp.LzgPWLRRWN\/ip \/tmp\/tmp.LzgPWLRRWN\/sr \/tmp\/tmp.LzgPWLRRWN\/sr_types .\/vpp\/binapi\/ + rmdir \/tmp\/tmp.LzgPWLRRWN + echo 'Done!' Done! (.venv) ~\/go\/src\/srv6$ exit logout<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u0443\u0436\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u043a\u043e\u0434\u0430, \u2014 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f \u043a VPP API \u0441\u043e\u043a\u0435\u0442\u0443:<\/p>\n<pre><code>:~\/go\/src\/srv6-vpp$ export LIBRARY_PATH=\/usr\/lib\/gcc\/x86_64-linux-gnu\/12:$LIBRARY_PATH ~\/go\/src\/srv6-vpp$ go run main.go panic: initiating vpp connect, socket-path : dial unix \/run\/vpp\/api.sock: connect: permission denied   goroutine 1 [running]: main.main()  \/home\/user\/go\/src\/srv6-vpp\/main.go:16 +0x19c exit status 2<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u0440\u0430\u0432 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u043c\u0435\u043d\u044f, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438) \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f, \u0447\u0442\u043e \u044f \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b:  <\/p>\n<pre><code>~\/go\/src\/srv6-vpp$ ls -l \/run\/vpp\/api.sock srwxrwxr-x 1 root vpp 0 Jun 17 11:48 \/run\/vpp\/api.sock :~\/go\/src\/srv6-vpp$ sudo usermod -aG vpp $USER ~\/go\/src\/srv6-vpp$ newgrp vpp :~\/go\/src\/srv6-vpp$ groups vpp sudo user ~\/go\/src\/srv6-vpp$ go run main.go [] &lt;nil&gt;<\/code><\/pre>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u043d\u0433\u0430 SRv6 Policy \u0432 VPP  <\/h2>\n<p>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044e:  <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c00\/658\/e25\/c00658e25c1cb3e142b38a383f8338f5.jpg\" alt=\"\u0420\u0438\u0441. 4. \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f  \" title=\"\u0420\u0438\u0441. 4. \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f  \" width=\"1920\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c00\/658\/e25\/c00658e25c1cb3e142b38a383f8338f5.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c00\/658\/e25\/c00658e25c1cb3e142b38a383f8338f5.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 4. \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f  <\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437-\u0437\u0430 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0412\u041c \u044f \u043d\u0435 \u043c\u043e\u0433 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0434\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0412\u041c \u0432 VPP, \u0442.\u043a. \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Linux, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e VPP \u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c tap-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c dpdk-\u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c tap-\u043f\u043b\u0430\u0433\u0438\u043d \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 VPP:  <\/p>\n<pre><code>:~$ cat \/etc\/vpp\/startup.conf unix {   nodaemon   log \/var\/log\/vpp\/vpp.log   full-coredump   cli-listen \/run\/vpp\/cli.sock   gid vpp }   api-trace {   on }   api-segment {   gid vpp }   socksvr {   default }   cpu {   main-core 1 }   plugins {   path \/usr\/lib\/x86_64-linux-gnu\/vpp_plugins   plugin dpdk_plugin.so { disable }  # \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c DPDK   plugin tap_plugin.so { enable }# \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 TAP } ~$<\/code><\/pre>\n<p>\u0410 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 tap-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 VPP:<\/p>\n<pre><code>vpp# create tap tap0 vpp# set interface rx-mode tap0 adaptive vpp# set interface ip address tap0 2001::1\/120 vpp# set interface state tap0 up vpp# show interface           Name           IdxState  MTU (L3\/IP4\/IP6\/MPLS) Counter      Count     local0                        0 down      0\/0\/0\/0       tap0                          1  up      9000\/0\/0\/0 tx packets                 1                                                                 tx bytes                 150 vpp# exit <\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u0442\u0435\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0439\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c (\u043c\u043d\u0435 \u043e\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c): \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0445\u043e\u0441\u0442-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 VPP \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0412\u041c:  <\/p>\n<pre><code>vpp# create host-interface name enp1s0 host-enp1s0 vpp# set interface mac address host-enp1s0 52:54:00:15:7f:57 vpp# set int ip address host-enp1s0 2a02:5501:30:400a::bbb1\/64 vpp# set interface state host-enp1s0 up vpp# ip route add 2a02:5501:30:400a::\/64 via 2a02:5501:30:400a::bbb1 host-enp1s0 ~$ ping 2a02:5501:30:400a::bbb3 PING 2a02:5501:30:400a::bbb3(2a02:5501:30:400a::bbb3) 56 data bytes 64 bytes from 2a02:5501:30:400a::bbb3: icmp_seq=1 ttl=64 time=0.245 ms 64 bytes from 2a02:5501:30:400a::bbb3: icmp_seq=2 ttl=64 time=0.125 ms 64 bytes from 2a02:5501:30:400a::bbb3: icmp_seq=3 ttl=64 time=0.150 ms 64 bytes from 2a02:5501:30:400a::bbb3: icmp_seq=4 ttl=64 time=0.124 ms 64 bytes from 2a02:5501:30:400a::bbb3: icmp_seq=5 ttl=64 time=0.118 ms 64 bytes from 2a02:5501:30:400a::bbb3: icmp_seq=6 ttl=64 time=0.137 ms ^C --- 2a02:5501:30:400a::bbb3 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5133ms rtt min\/avg\/max\/mdev = 0.118\/0.149\/0.245\/0.043 ms<\/code><\/pre>\n<h3>\u0417\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 Go  <\/h3>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:<\/strong> \u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Go (\u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u041f\u041e), \u044d\u0442\u043e \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 \u044d\u0442\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0439 \u043d\u0430 \u0441\u0430\u043c\u044b\u0439 \u043b\u0443\u0447\u0448\u0438\u0439 (\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439) \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430.  <\/p>\n<p>\u041d\u0430\u0448 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0434\u043e\u043b\u0436\u0435\u043d:<\/p>\n<ol>\n<li>\n<p>\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e SR Policy \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e json-\u0444\u0430\u0439\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u0441 VPP;\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 VPP \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e SR Policy;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0445 Go-\u043c\u043e\u0434\u0443\u043b\u044f: main \u0438 srv6.<\/p>\n<p>Srv6.go \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043c\u0435\u0442\u043e\u0434\u044b) \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f SRv6 Policy \u043f\u043b\u044e\u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: SrPolicyAdd \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 SRv6-\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p>SR \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0438\u043f, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SRv6;<\/p>\n<\/li>\n<li>\n<p>SRv6Policy \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 SRv6-\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0441 BSID \u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:<\/p>\n<ul>\n<li>\n<p>NewSR \u2014 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 SR;<\/p>\n<\/li>\n<li>\n<p>AddPolicy \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u0443\u044e SRv6-\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0432 VPP;<\/p>\n<\/li>\n<li>\n<p>ipToVpp \u2014 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 VPP.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 <a href=\"http:\/\/main.go\" rel=\"noopener noreferrer nofollow\">main.go<\/a>:<\/p>\n<ul>\n<li>\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f SRv6-\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438\u0437 JSON-\u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435) \u0441 SRv6-\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>Main.go \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c srv6 \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 VPP:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 VPP \u0447\u0435\u0440\u0435\u0437 govpp.<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442 SRv6 \u0447\u0435\u0440\u0435\u0437 srv6.NewSR.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430 SRv6.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0434\u0443\u043b\u044f srv6, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>\u00a0SrPolicyAdd (\u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438);<\/p>\n<\/li>\n<li>\n<p>SrPolicyDel (\u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 DeleteSrPolicy);<\/p>\n<\/li>\n<li>\n<p>\u00a0SrPolicyMod (\u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043a\u0430\u043a delete + add);<\/p>\n<\/li>\n<li>\n<p>SrPoliciesDump (\u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438).<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"http:\/\/main.go\" rel=\"noopener noreferrer nofollow\">main.go<\/a>:<\/p>\n<ul>\n<li>\n<p>SegmentList \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0432\u0435\u0441\u043e\u043c (\u0434\u043b\u044f JSON);<\/p>\n<\/li>\n<li>\n<p>Operation \u2014 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u0434 SRv6-\u043f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439;<\/p>\n<\/li>\n<li>\n<p>Config \u2014 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u0442 SRv6 Policy \u0432 VPP:<\/p>\n<pre><code class=\"go\">:~\/go\/src\/srv6-vpp\/v2$ cat config_spray.json {     \"operations\": [       {         \"action\": \"add\",         \"bsid\": \"2a02:5501:30:400a::bbb8\",         \"policy_type\": \"spray\",         \"behavior\": \"encap\",         \"segment_lists\": [           {             \"segments\": [\"2a02:5501:30:400a::bbb3\", \"2a02:5501:30:400a::bbb4\"],             \"weight\": 30           },           {             \"segments\": [\"2a02:5501:30:400a::bbb3\", \"2a02:5501:30:400a::bbb4\", \"2a02:5501:30:400a::bbb3\", \"2a02:5501:30:400a::bbb4\"],             \"weight\": 70           }         ],         \"encap_src\": \"2001:db8::1\",         \"fib_table\": 0       }     ]   }   :~\/go\/src\/srv6-vpp\/v2$ go run main.go config_spray.json 2025\/06\/29 20:01:48 Successfully added spray policy (BSID: 2a02:5501:30:400a::bbb8) ~\/go\/src\/srv6-vpp\/v2$ sudo vppctl sh sr policies SR policies: [0].- BSID: 2a02:5501:30:400a::bbb8 Behavior: Encapsulation EncapSrcIP: :: Type: Spray FIB table: 0 Segment Lists:   [0].- &lt; 2a02:5501:30:400a::bbb3, 2a02:5501:30:400a::bbb4 &gt; weight: 30   [1].- &lt; 2a02:5501:30:400a::bbb3, 2a02:5501:30:400a::bbb4, 2a02:5501:30:400a::bbb3, 2a02:5501:30:400a::bbb4 &gt; weight: 0 -----------<\/code><\/pre>\n<p>\u0421 \u044d\u0442\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u043a\u043e\u0434\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 Segment Lists \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u0432\u0435\u0441\u0430 \u0434\u043b\u044f wECMP \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 SL \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u0432 0 (\u0441\u043c. \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u043a\u043e\u0434\u0430 \u0432\u044b\u0448\u0435).<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 CLI \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430:<\/p>\n<pre><code>sr policy mod bsid 2a02:5501:30:400a::bbb8 sl 0 weight 30 segments 2a02:5501:30:400a::bbb3 2a02:5501:30:400a::bbb4 sr policy mod bsid 2a02:5501:30:400a::bbb8 sl 2 weight 70 segments 2a02:5501:30:400a::bbb3 2a02:5501:30:400a::bbb4 2a02:5501:30:400a::bbb3 2a02:5501:30:400a::bbb4 <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f binapi \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 SrPolicyAdd \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430 \u043e\u0434\u0438\u043d \u00ab\u043f\u0440\u043e\u0445\u043e\u0434\u00bb \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e SL \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0441\u0430\u043c\u0438 \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 workaround \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0451 \u0441 \u043e\u0434\u043d\u0438\u043c SL \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0432\u0435\u0441\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 SL \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0432\u0435\u0441\u043e\u043c \u0438 \u0442. \u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: <a href=\"https:\/\/github.com\/BorisH2018\/srv6-vpp\/tree\/master\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/BorisH2018\/srv6-vpp\/tree\/master<\/a>\u00a0<\/p>\n<p>\u041a\u0430\u043a \u0438\u0442\u043e\u0433, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e SR Policy \u0441 SL, \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0441\u0430\u043c\u0438:<\/p>\n<pre><code class=\"go\">:~\/go\/src\/srv6-vpp\/v2$ go run main.go config_spray.json 2025\/07\/02 07:12:09 Starting policy operation for BSID: 2a02:5501:30:400a::bbb8 2025\/07\/02 07:12:09 Policy type: default, Encap: true 2025\/07\/02 07:12:09 Setting encap_src to: 2a02:5501:30:400a::bbb1 2025\/07\/02 07:12:09 Configured segment lists (note: VPP will sort by weight descending): 2025\/07\/02 07:12:09   List 0: 2025\/07\/02 07:12:09     Segments: [2a02:5501:30:400a::bbb3 2a02:5501:30:400a::bbb4] 2025\/07\/02 07:12:09     Weight: 30 2025\/07\/02 07:12:09   List 1: 2025\/07\/02 07:12:09     Segments: [2a02:5501:30:400a::bbb3 2a02:5501:30:400a::bbb4 2a02:5501:30:400a::bbb3 2a02:5501:30:400a::bbb4] 2025\/07\/02 07:12:09     Weight: 70 2025\/07\/02 07:12:09 Total weight across all segment lists: 100 2025\/07\/02 07:12:09 Existing policy found - deleting... 2025\/07\/02 07:12:09 Policy successfully deleted after 1 attempts 2025\/07\/02 07:12:09 Current VPP SR state: 2025\/07\/02 07:12:09 SR policies: 2025\/07\/02 07:12:09 Creating new SRv6 policy... 2025\/07\/02 07:12:09 Policy configuration: {   \"BSID\": \"2a02:5501:30:400a::bbb8\",   \"SegmentLists\": [     {       \"Segments\": [         \"2a02:5501:30:400a::bbb3\",         \"2a02:5501:30:400a::bbb4\"       ],       \"Weight\": 30     },     {       \"Segments\": [         \"2a02:5501:30:400a::bbb3\",         \"2a02:5501:30:400a::bbb4\",         \"2a02:5501:30:400a::bbb3\",         \"2a02:5501:30:400a::bbb4\"       ],       \"Weight\": 70     }   ],   \"EncapSrc\": \"2a02:5501:30:400a::bbb1\",   \"FibTable\": 0,   \"IsEncap\": true,   \"PolicyType\": \"default\" } 2025\/07\/02 07:12:10 Policy created in 200.84536ms 2025\/07\/02 07:12:10 Performing API verification... 2025\/07\/02 07:12:10 API verification successful 2025\/07\/02 07:12:10   BSID: 2a02:5501:30:400a::bbb8 2025\/07\/02 07:12:10   IsEncap: true 2025\/07\/02 07:12:10   Total weight: 100 2025\/07\/02 07:12:10   Segment lists count: 2 2025\/07\/02 07:12:10 Performing CLI verification... 2025\/07\/02 07:12:10 VPP CLI output: SR policies: [0].-   BSID: 2a02:5501:30:400a::bbb8         Behavior: Encapsulation         EncapSrcIP: 2a02:5501:30:400a::bbb1         Type: Default         FIB table: 0         Segment Lists:         [0].- &lt; 2a02:5501:30:400a::bbb3, 2a02:5501:30:400a::bbb4, 2a02:5501:30:400a::bbb3, 2a02:5501:30:400a::bbb4 &gt; weight: 70         [1].- &lt; 2a02:5501:30:400a::bbb3, 2a02:5501:30:400a::bbb4 &gt; weight: 30 ----------- 2025\/07\/02 07:12:10 Policy type 'default' verified 2025\/07\/02 07:12:10 CLI verification: all critical parameters confirmed 2025\/07\/02 07:12:10 Successfully added default policy (BSID: 2a02:5501:30:400a::bbb8)<\/code><\/pre>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b  <\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f VPP \u0447\u0435\u0440\u0435\u0437 binapi \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u0442\u044c \u0432 VPP SR Policy c SL \u0441 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u0438\u043c SID (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e MSD);<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u0442\u044c \u0432 VPP SR Policy c Multiple SLs \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u0441\u0430\u043c\u0438 \u0434\u043b\u044f wECMP.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c \u043c\u0435\u0436\u0434\u0443 VM \u0438 \u0443\u0439\u0442\u0438 \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u0433\u043e \u043f\u0443\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 VM \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0442. \u0435. \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 Traffic Engineering.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0441\u0432\u043e\u0438\u0442\u044c\u0441\u044f \u0441 binapi \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 VPP \u0432 \u0441\u0432\u043e\u0438\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SRv6 \u0432 MWS \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0430 IETF-123. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e <a href=\"https:\/\/www.youtube.com\/watch?v=HsoGR_8m2UM&amp;t=2745s\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<hr\/>\n<p><strong>\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e MWS Cloud Platform:<\/strong><\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/mws\/articles\/928962\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c Development Platform \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u0431\u043b\u0430\u043a\u0435 MWS \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u043c inner source-\u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/mws\/articles\/931232\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0441ontrol plane \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c Kubernetes \u043e\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0433\u043b\u0430\u0437<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/mws\/articles\/909306\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u043c\u044b \u0432 MWS Cloud Platform \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 Object Storage<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/936840\/\"> https:\/\/habr.com\/ru\/articles\/936840\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0411\u043e\u0440\u0438\u0441 \u0425\u0430\u0441\u0430\u043d\u043e\u0432, \u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u0432 <a href=\"https:\/\/mws.ru\/cloud-platform\/?utm_source=habr_hub&amp;utm_campaign=mwscloudplatform&amp;utm_term=article936840\" rel=\"noopener noreferrer nofollow\">MWS Cloud Platform<\/a>. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 binapi, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f VPP \u0441 \u0435\u0451 \u043f\u043e\u043c\u043e\u0449\u044c\u044e. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c binapi \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0432 \u0426\u041e\u0414 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e Traffic Engineering \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 VPP. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e SR Policy \u0447\u0435\u0440\u0435\u0437 VPP. \u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0441\u0432\u0435\u0436\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 SR Policy, \u0430\u0434\u0440\u0435\u0441\u0443\u044e \u043a \u0441\u0432\u043e\u0435\u0439<a href=\"https:\/\/habr.com\/p\/816439\/\" rel=\"noopener noreferrer nofollow\"> \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.  <\/p>\n<p>\u0425\u043e\u0447\u0443 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c-\u0441\u043e\u0430\u0432\u0442\u043e\u0440\u0430\u043c \u0438\u0437 MWS, \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0432\u0448\u0438\u043c \u043c\u043d\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u2014 \u044d\u0442\u043e \u0420\u0443\u0441\u043b\u0430\u043d \u0418\u0431\u0440\u0430\u0433\u0438\u043c\u043e\u0432, \u0410\u0440\u0442\u0451\u043c \u0413\u043b\u0430\u0437\u044b\u0447\u0435\u0432, \u041c\u0438\u0445\u0430\u0438\u043b \u0421\u043e\u043a\u043e\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u0438 \u041f\u0430\u0432\u0435\u043b \u0422\u043a\u0430\u0447. \u0422\u0430\u043a\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438\u0437 MWS, \u043a\u0442\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u043b \u043c\u043d\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439.  <\/p>\n<h2>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043f\u0440\u043e VPP  <\/h2>\n<p>\u0415\u0441\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 <a href=\"https:\/\/wiki.fd.io\/view\/VPP\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u043f\u043e VPP (Vector Packet Processing \u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0430\u0434\u0438\u043c \u043b\u0438\u0448\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0443\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>VPP \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (\u0432\u0435\u043a\u0442\u043e\u0440 \u2014 \u043c\u0430\u0441\u0441\u0438\u0432). \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441\u043c. <a href=\"https:\/\/s3-docs.fd.io\/vpp\/25.10\/aboutvpp\/scalar-vs-vector-packet-processing.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>) \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0434\u0430:<\/p>\n<ul>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, quad-loop \u0434\u043b\u044f 4 \u043f\u0430\u043a\u0435\u0442\u043e\u0432). \u042d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 IPC (instructions per cycle) \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e, \u0447\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0438 \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043a\u0435\u0448\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 (inline) \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0445\u043e\u0436\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445\u00a0 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 (NPU), \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043e\u0432 (pipeline).<\/p>\n<p>VPP \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u00ab\u0433\u0440\u0430\u0444\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u00bb. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0433\u0440\u0430\u0444 \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c <strong>\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432<\/strong>, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b VPP \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442:<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0437\u043b\u044b \u0433\u0440\u0430\u0444\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0433\u0440\u0430\u0444\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 VPP (\u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b).<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c VPP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 DPDK.<\/p>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 VPP \u0432 MWS  <\/h2>\n<p>\u0412 MWS \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c VPP \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 SRv6 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u043a\u0430 MWS Cloud Platform. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043d\u0435\u0451 <a href=\"https:\/\/www.youtube.com\/watch?v=ZmKNTSYWAuE\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043c\u043e\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0432 6-\u043c \u044d\u043f\u0438\u0437\u043e\u0434\u0435 \u0440\u0435\u0430\u043b\u0438\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Building the Cloud<\/a>.  <\/p>\n<p>\u041e\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0432\u0443\u0445 \u0412\u041c. \u0418\u0442\u0430\u043a, \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (CPL) \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 API \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0433\u0435\u043d\u0442 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b SR Policy, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0412\u041c \u043a \u0434\u0440\u0443\u0433\u043e\u0439: Binding SID, Endpoint, Segment List (\u0434\u0430\u043b\u0435\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0431\u0443\u0434\u0443 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u2014 SL), \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e END.SID \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u0412\u041c. \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0433\u0435\u043d\u0442 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 SR Policy (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442) VPP \u0447\u0435\u0440\u0435\u0437 binapi, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0438\u0436\u0435. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u0440\u0438\u0441. 1. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e CPL \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VPN \u0438 \u0441\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0432 VPN: \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0445 \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0430\u0433\u0435\u043d\u0442\u0443, \u0430 \u0442\u043e\u0442 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 VPP.  <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 1. \u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SRv6 Overlay \u043d\u0430 \u0431\u0430\u0437\u0435 SR Policy \u0432 \u0441\u0435\u0442\u0438 MWS  <\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SR Policy \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b PCEP \u0438 BGP SR (\u043e\u043d\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u0441\u043c. \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u044b\u0448\u0435). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e gRPC \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 (\u0441\u043c.<a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-ali-spring-sr-policy-programming-rpc\/\" rel=\"noopener noreferrer nofollow\"> draft-ali-spring-sr-policy-programming-rpc<\/a>). VPP \u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 API, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SR Policy, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 binapi \u0432 VPP \u0442\u0430\u043a \u0432\u0430\u0436\u0435\u043d? \u0414\u043b\u044f SR Policy, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u0432\u0430\u0436\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b PCEP \u0438 BGP SR \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 control plane \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0430 VPP \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433\u0430, \u0442. \u0435. \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 SR Policy. \u0422\u0430\u043a\u0436\u0435 binapi \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439) \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043e \u0447\u0451\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c API VPP.<\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 API VPP  <\/h2>\n<p>VPP \u0438\u043c\u0435\u0435\u0442 API-\u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 VPP \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0441\u043e\u043a\u0435\u0442), \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:\u00a0<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0431\u0449\u0438\u0439 \u043a\u043e\u0434<\/strong> (common code) \u2014 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/strong> (generated code) \u2014 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API (\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438).<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430<\/strong> (code generator) \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 API, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>API \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445:<\/p>\n<ul>\n<li>\n<p><strong>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439<\/strong>. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0435\u0451 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439<\/strong>. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u00a0API VPP \u2014 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 \u0441 gRPC (\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f API).<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 binapi \u043d\u0430 \u044f\u0437\u044b\u043a\u0430\u0445 C, C++, Go. \u0414\u0430\u043b\u0435\u0435 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 <a href=\"https:\/\/s3-docs.fd.io\/vpp\/23.06\/interfacing\/go\/index.html\" rel=\"noopener noreferrer nofollow\">Go<\/a> (Go API \u0438\u043b\u0438 go-vpp \u043d\u0430 \u0440\u0438\u0441. 2):<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 2. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 VPP \u043f\u043e binapi  <\/figcaption><\/div>\n<\/figure>\n<h3>\u0422\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 binapi  <\/h3>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f binapi. \u0412\u0438\u0434\u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0441 gRPC (\u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 gRPC <a href=\"https:\/\/habr.com\/p\/885622\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>).<\/p>\n<ol>\n<li>\n<p>Request (\u0437\u0430\u043f\u0440\u043e\u0441) \u2014 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>Dump \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u0441\u0435\u0440\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432);<\/p>\n<\/li>\n<li>\n<p>Detail \u2014 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0443;<\/p>\n<\/li>\n<li>\n<p>Subs \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 rpc:Subscribe \u0432 gNMI);<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u0432 \u0442. \u0447. events \u2014 \u043a\u0430\u043a \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435).<\/p>\n<\/li>\n<\/ol>\n<p>\u041b\u043e\u0433\u0438\u043a\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u0440\u0438\u0441. 3<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 3. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f binapi  <\/figcaption><\/div>\n<\/figure>\n<h3>\u0426\u0435\u043b\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f  <\/h3>\n<p>\u041c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438\u00a0 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SR Policy \u0432 MWS, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u043d\u0433\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 SID \u0432 SL, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432\/\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u043c (\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f BGP Best-Path\u00a0 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430), \u0430 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0438\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0438\u0436\u0438\u043d\u0438\u043d\u0433\u0430 \u0432 SR Policy (\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u2014 \u0432 Candidate Path \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 SR Policy: \u0441\u043c. \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043c\u043e\u044e \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u044b\u0448\u0435 \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439) \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 SL \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0441\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 (wECMP).<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412 MWS \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043a VPP c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438. \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 <a href=\"http:\/\/gen.sh\" rel=\"noopener noreferrer nofollow\">gen.sh<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<\/p>\n<ol>\n<li>\n<p>\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f: \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438, \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f VPP, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 binapi (\u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u2014 plugins.txt);<\/p>\n<\/li>\n<li>\n<p>\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 vpp (\u0441 \u0433\u0438\u0442\u0430\u00a0 \u043b\u0438\u0431\u043e \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430);<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 binapi;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b (\u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 plugins.txt);<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a vpp.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0434 <a href=\"http:\/\/gen.sh\" rel=\"noopener noreferrer nofollow\">gen.sh<\/a>  <\/p>\n<pre><code>$ cat go\/src\/srv6-vpp\/scripts\/gen.sh #!\/bin\/bash # scripts\/govpp\/gen.sh   # Enable debugging and exit immediately if a command exits with a non-zero status set -euxo pipefail   # Specify source and destination paths INPUT_DIR=\"\/usr\/share\/vpp\/api\" # \u0412 OUTPUT_DIR \u0431\u0443\u0434\u0435\u0442 \u0413\u043e\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f SR API OUTPUT_DIR=\".\/vpp\/binapi\/\" VPP_REPO=\"git@git.mws-team.ru:mws\/network\/FDio\/vpp.git\"   # Define an array of desired plugins DESIRED_PLUGINS=$(cat scripts\/plugins.txt)   # Function to clean previously generated clients clean_output_dir() {   echo \"Cleaning previously generated clients...\"   rm -rf ${OUTPUT_DIR} }   # Function to clone the VPP repository and generate govpp binapi clone_and_generate() {   echo \"Cloning VPP repository and generating govpp binapi...\" #  git clone  ${VPP_REPO}   binapi-generator --input-dir=${INPUT_DIR} --output-dir=${OUTPUT_DIR} }   # Function to remove unused generated code remove_unused_generated_code() {   echo \"Removing unused generated code...\"   TMP_DIR=$(mktemp -d)     for PLUGIN in ${DESIRED_PLUGINS[@]}; do if [ -d ${OUTPUT_DIR}${PLUGIN} ]; then   mv ${OUTPUT_DIR}${PLUGIN} ${TMP_DIR} fi   done     rm -rf ${OUTPUT_DIR}*\/   mv ${TMP_DIR}\/* ${OUTPUT_DIR}   rmdir ${TMP_DIR} }   # Function to remove the VPP repository clean_vpp_repo() {   echo \"Removing VPP repository...\"   rm -rf ${INPUT_DIR} }   # Main process main() {   clean_output_dir   clone_and_generate   remove_unused_generated_code  # clean_vpp_repo   echo \"Done!\" }   # Call the main function main<\/code><\/pre>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b binapi, \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 plugins.txt. \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u043d\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 SR Policy.<\/p>\n<pre><code>bhassanov@cali-11:~$ cat go\/src\/srv6-vpp\/scripts\/plugins.txt interface interface_types ip ip_types sr<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b binapi \u043d\u0430 Go \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0435 \u043d\u0438\u0436\u0435 1.23.<br \/><a href=\"http:\/\/Gen.sh\" rel=\"noopener noreferrer nofollow\">Gen.sh<\/a> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 binapi, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438\u0437 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f vpp \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 json-\u0444\u0430\u0439\u043b\u044b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c API, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 ply \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043d\u0430 Go \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c API.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 binapi \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>:~\/go\/src\/srv6$ go install go.fd.io\/govpp\/cmd\/binapi-generator@latest go: downloading github.com\/sirupsen\/logrus v1.9.3 go: downloading github.com\/spf13\/pflag v1.0.6 go: downloading golang.org\/x\/text v0.24.0 go: downloading github.com\/bennyscetbun\/jsongo v1.1.2 go: downloading golang.org\/x\/sys v0.31.0 # go.fd.io\/govpp\/cmd\/binapi-generator \/usr\/local\/go\/pkg\/tool\/linux_amd64\/link: running gcc failed: exit status 1 \/usr\/bin\/gcc -m64 -Wl,-z,now -Wl,-z,nocopyreloc -o $WORK\/b001\/exe\/a.out -rdynamic \/tmp\/go-link-2754728408\/go.o \/tmp\/go-link-2754728408\/000000.o \/tmp\/go-link-2754728408\/000001.o \/tmp\/go-link-2754728408\/000002.o \/tmp\/go-link-2754728408\/000003.o \/tmp\/go-link-2754728408\/000004.o \/tmp\/go-link-2754728408\/000005.o \/tmp\/go-link-2754728408\/000006.o \/tmp\/go-link-2754728408\/000007.o<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-471720","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/471720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=471720"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/471720\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=471720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=471720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=471720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}