{"id":579,"date":"2016-03-04T14:53:15","date_gmt":"2016-03-04T13:53:15","guid":{"rendered":"http:\/\/queen.run.montefiore.ulg.ac.be\/~barbette\/?p=579"},"modified":"2016-03-04T14:55:39","modified_gmt":"2016-03-04T13:55:39","slug":"a-reminder-about-packets-in-networks","status":"publish","type":"post","link":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/","title":{"rendered":"A reminder about packets in networks"},"content":{"rendered":"<p>An ethernet packet is\u00a0made in layers. Each layer is inside another layer.<\/p>\n<p>The content of\u00a0the skbuff created in e1000_clean_rx_irq is the whole ethernet frame.\u00a0The Ethernet frame starts with an ethernet header, and then contains the\u00a0ethernet payload.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif\" alt=\"\" width=\"552\" height=\"178\" \/><\/p>\n<p>You do not receive the preamble (it&#8217;s just data to mark the beginning of the frame, always the same so useless to copy) and usually not the CRC either as all NICs can check it is correct for you (it will be removed in e1000_main.c:4451 if it&#8217;s there.)<\/p>\n<p>Then how to know what&#8217;s in the data? Well, it will be given by two bytes starting from the 12th byte.<\/p>\n<p>The known types are defined in if_ether.h, for example you can find the type of the IP packets there :<\/p>\n<p><code lang=\"c\">#define ETH_P_IP 0x0800 \/* Internet Protocol packet *\/<\/code><\/p>\n<p>So you know that somewhere, the &#8220;thing&#8221; handling the packets of the IP protocol will check that the type equals ETH_P_IP. It will in fact check if the type is\u00a0cpu_to_be16(ETH_P_IP), because <strong>in the network, bytes are big-endian, while the CPU use little-endian.\u00a0<\/strong>It means that in the network, 0x0800 will be 0x0080 as the most significant byte will be on the right. There is a lot of packets types, not just IP. Do not expect to find a &#8220;if (type == cpu_to_be16(ETH_P_IP))&#8221;&#8230; The kernel use a list of structure of known packet type and check the whole list against the actual packet type.<\/p>\n<p>The kernel will call the handler defined for the specific protocol matching the IP packet.<\/p>\n<p>The same scheme applies more or less for every layer, as the IP packet itself is also composed of a header with a type, and some data. And inside it there is again a UDP, TCP, ICMP, &#8230; packet with again a header and some data.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"http:\/\/jamesslocum.com\/images\/udp_ip_frame.png\" alt=\"\" width=\"455\" height=\"347\" \/><\/p>\n<p>For example the type of the payload of the IP packet is given as a unique byte (so no byte order problem here) in the 9th byte of the IP header\u00a0:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/nmap.org\/book\/images\/hdr\/MJB-IP-Header-800x576.png\" alt=\"\" width=\"800\" height=\"576\" \/><\/p>\n<p>As there is only 256 possible types, the linux kernel use a table, and not a list as it allows to directly jump to good &#8220;sub&#8221; ip layer handler such as the one for UDP, TCP, &#8230;<\/p>\n<p>IP protocols are defined in in.h for example we have\u00a0IPPROTO_UDP = 17, \/* User Datagram Protocol *\/ at line 40, which tells us that 17 is the UDP protocol. Again, a quick search on who use\u00a0IPPROTO_UDP in the \/net\/ipv4 folder will tell us who is defining some kind of handler to handle that kind of packets with the IP protocol set to 17. A hint : there is a function which will set the good index of the &#8220;protocol table&#8221; to the structure containing informations about the protocol. So it&#8217;s not like the ethernet layer where the list contains the type and the function, here the protocol number is not in the handler structure \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An ethernet packet is\u00a0made in layers. Each layer is inside another layer. The content of\u00a0the skbuff created in e1000_clean_rx_irq is the whole ethernet frame.\u00a0The Ethernet frame starts with an ethernet header, and then contains the\u00a0ethernet payload. You do not receive the preamble (it&#8217;s just data to mark the beginning of the frame, always the same &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A reminder about packets in networks&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[76],"tags":[],"class_list":["post-579","post","type-post","status-publish","format-standard","hentry","category-os2016"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A reminder about packets in networks - Tom Barbette<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A reminder about packets in networks - Tom Barbette\" \/>\n<meta property=\"og:description\" content=\"An ethernet packet is\u00a0made in layers. Each layer is inside another layer. The content of\u00a0the skbuff created in e1000_clean_rx_irq is the whole ethernet frame.\u00a0The Ethernet frame starts with an ethernet header, and then contains the\u00a0ethernet payload. You do not receive the preamble (it&#8217;s just data to mark the beginning of the frame, always the same &hellip; Continue reading &quot;A reminder about packets in networks&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/\" \/>\n<meta property=\"og:site_name\" content=\"Tom Barbette\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-04T13:53:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-03-04T13:55:39+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif\" \/>\n<meta name=\"author\" content=\"Tom Barbette\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TomBarbette\" \/>\n<meta name=\"twitter:site\" content=\"@TomBarbette\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tom Barbette\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/\"},\"author\":{\"name\":\"Tom Barbette\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#\\\/schema\\\/person\\\/7f791766092e1207bc7a94a65e74f4fd\"},\"headline\":\"A reminder about packets in networks\",\"datePublished\":\"2016-03-04T13:53:15+00:00\",\"dateModified\":\"2016-03-04T13:55:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/\"},\"wordCount\":498,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.dcs.bbk.ac.uk\\\/~ptw\\\/teaching\\\/IWT\\\/link-layer\\\/ethernet-frame.gif\",\"articleSection\":[\"INFO-0940 Operating Systems \u2013 2015-2016 Specific posts\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/\",\"url\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/\",\"name\":\"A reminder about packets in networks - Tom Barbette\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.dcs.bbk.ac.uk\\\/~ptw\\\/teaching\\\/IWT\\\/link-layer\\\/ethernet-frame.gif\",\"datePublished\":\"2016-03-04T13:53:15+00:00\",\"dateModified\":\"2016-03-04T13:55:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.dcs.bbk.ac.uk\\\/~ptw\\\/teaching\\\/IWT\\\/link-layer\\\/ethernet-frame.gif\",\"contentUrl\":\"http:\\\/\\\/www.dcs.bbk.ac.uk\\\/~ptw\\\/teaching\\\/IWT\\\/link-layer\\\/ethernet-frame.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/a-reminder-about-packets-in-networks\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A reminder about packets in networks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#website\",\"url\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/\",\"name\":\"Tom Barbette\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#organization\",\"name\":\"Efficiency of Networked Systems Group\",\"url\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-logo-uclouvain-2021-barbette.png\",\"contentUrl\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-logo-uclouvain-2021-barbette.png\",\"width\":512,\"height\":512,\"caption\":\"Efficiency of Networked Systems Group\"},\"image\":{\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TomBarbette\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tom-barbette\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/#\\\/schema\\\/person\\\/7f791766092e1207bc7a94a65e74f4fd\",\"name\":\"Tom Barbette\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/aecd99cba3b4d91d3775fde3219bfa362cd99acfbe95848ec303b9685f366fcd?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/aecd99cba3b4d91d3775fde3219bfa362cd99acfbe95848ec303b9685f366fcd?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/aecd99cba3b4d91d3775fde3219bfa362cd99acfbe95848ec303b9685f366fcd?s=96&r=g\",\"caption\":\"Tom Barbette\"},\"sameAs\":[\"https:\\\/\\\/www.tombarbette.be\"],\"url\":\"https:\\\/\\\/perso.uclouvain.be\\\/tom.barbette\\\/author\\\/tom\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A reminder about packets in networks - Tom Barbette","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/","og_locale":"en_US","og_type":"article","og_title":"A reminder about packets in networks - Tom Barbette","og_description":"An ethernet packet is\u00a0made in layers. Each layer is inside another layer. The content of\u00a0the skbuff created in e1000_clean_rx_irq is the whole ethernet frame.\u00a0The Ethernet frame starts with an ethernet header, and then contains the\u00a0ethernet payload. You do not receive the preamble (it&#8217;s just data to mark the beginning of the frame, always the same &hellip; Continue reading \"A reminder about packets in networks\"","og_url":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/","og_site_name":"Tom Barbette","article_published_time":"2016-03-04T13:53:15+00:00","article_modified_time":"2016-03-04T13:55:39+00:00","og_image":[{"url":"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif","type":"","width":"","height":""}],"author":"Tom Barbette","twitter_card":"summary_large_image","twitter_creator":"@TomBarbette","twitter_site":"@TomBarbette","twitter_misc":{"Written by":"Tom Barbette","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#article","isPartOf":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/"},"author":{"name":"Tom Barbette","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#\/schema\/person\/7f791766092e1207bc7a94a65e74f4fd"},"headline":"A reminder about packets in networks","datePublished":"2016-03-04T13:53:15+00:00","dateModified":"2016-03-04T13:55:39+00:00","mainEntityOfPage":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/"},"wordCount":498,"commentCount":0,"publisher":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#organization"},"image":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#primaryimage"},"thumbnailUrl":"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif","articleSection":["INFO-0940 Operating Systems \u2013 2015-2016 Specific posts"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/","url":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/","name":"A reminder about packets in networks - Tom Barbette","isPartOf":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#website"},"primaryImageOfPage":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#primaryimage"},"image":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#primaryimage"},"thumbnailUrl":"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif","datePublished":"2016-03-04T13:53:15+00:00","dateModified":"2016-03-04T13:55:39+00:00","breadcrumb":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#primaryimage","url":"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif","contentUrl":"http:\/\/www.dcs.bbk.ac.uk\/~ptw\/teaching\/IWT\/link-layer\/ethernet-frame.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/a-reminder-about-packets-in-networks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/perso.uclouvain.be\/tom.barbette\/"},{"@type":"ListItem","position":2,"name":"A reminder about packets in networks"}]},{"@type":"WebSite","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#website","url":"https:\/\/perso.uclouvain.be\/tom.barbette\/","name":"Tom Barbette","description":"","publisher":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/perso.uclouvain.be\/tom.barbette\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#organization","name":"Efficiency of Networked Systems Group","url":"https:\/\/perso.uclouvain.be\/tom.barbette\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#\/schema\/logo\/image\/","url":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-content\/uploads\/2022\/04\/cropped-logo-uclouvain-2021-barbette.png","contentUrl":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-content\/uploads\/2022\/04\/cropped-logo-uclouvain-2021-barbette.png","width":512,"height":512,"caption":"Efficiency of Networked Systems Group"},"image":{"@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/TomBarbette","https:\/\/www.linkedin.com\/in\/tom-barbette"]},{"@type":"Person","@id":"https:\/\/perso.uclouvain.be\/tom.barbette\/#\/schema\/person\/7f791766092e1207bc7a94a65e74f4fd","name":"Tom Barbette","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/aecd99cba3b4d91d3775fde3219bfa362cd99acfbe95848ec303b9685f366fcd?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/aecd99cba3b4d91d3775fde3219bfa362cd99acfbe95848ec303b9685f366fcd?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/aecd99cba3b4d91d3775fde3219bfa362cd99acfbe95848ec303b9685f366fcd?s=96&r=g","caption":"Tom Barbette"},"sameAs":["https:\/\/www.tombarbette.be"],"url":"https:\/\/perso.uclouvain.be\/tom.barbette\/author\/tom\/"}]}},"_links":{"self":[{"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/posts\/579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/comments?post=579"}],"version-history":[{"count":3,"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/posts\/579\/revisions"}],"predecessor-version":[{"id":582,"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/posts\/579\/revisions\/582"}],"wp:attachment":[{"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/media?parent=579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/categories?post=579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.uclouvain.be\/tom.barbette\/wp-json\/wp\/v2\/tags?post=579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}