1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957
|
<pre>Internet Engineering Task Force (IETF) D. Hankins
Request for Comments: 7227 Google
BCP: 187 T. Mrugalski
Updates: <a href="./rfc3315">3315</a> M. Siodelski
Category: Best Current Practice ISC
ISSN: 2070-1721 S. Jiang
Huawei Technologies Co., Ltd.
S. Krishnan
Ericsson
May 2014
<span class="h1">Guidelines for Creating New DHCPv6 Options</span>
Abstract
This document provides guidance to prospective DHCPv6 option
developers to help them create option formats that are easily
adoptable by existing DHCPv6 software. It also provides guidelines
for expert reviewers to evaluate new registrations. This document
updates <a href="./rfc3315">RFC 3315</a>.
Status of This Memo
This memo documents an Internet Best Current Practice.
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Further information on
BCPs is available in <a href="./rfc5741#section-2">Section 2 of RFC 5741</a>.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
<a href="http://www.rfc-editor.org/info/rfc7227">http://www.rfc-editor.org/info/rfc7227</a>.
<span class="grey">Hankins, et al. Best Current Practice [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
Copyright Notice
Copyright (c) 2014 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and the IETF Trust's Legal
Provisions Relating to IETF Documents
(<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
<span class="grey">Hankins, et al. Best Current Practice [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
Table of Contents
<a href="#section-1">1</a>. Introduction . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-4">4</a>
<a href="#section-2">2</a>. Requirements Language . . . . . . . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-3">3</a>. When to Use DHCPv6 . . . . . . . . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-4">4</a>. General Principles . . . . . . . . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-5">5</a>. Reusing Other Option Formats . . . . . . . . . . . . . . . . <a href="#page-6">6</a>
<a href="#section-5.1">5.1</a>. Option with IPv6 Addresses . . . . . . . . . . . . . . . <a href="#page-7">7</a>
<a href="#section-5.2">5.2</a>. Option with Single Flag (Boolean) . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-5.3">5.3</a>. Option with IPv6 Prefix . . . . . . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-5.4">5.4</a>. Option with 32-bit Integer Value . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-5.5">5.5</a>. Option with 16-bit Integer Value . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-5.6">5.6</a>. Option with 8-bit Integer Value . . . . . . . . . . . . . <a href="#page-11">11</a>
<a href="#section-5.7">5.7</a>. Option with URI . . . . . . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
<a href="#section-5.8">5.8</a>. Option with Text String . . . . . . . . . . . . . . . . . <a href="#page-12">12</a>
<a href="#section-5.9">5.9</a>. Option with Variable-Length Data . . . . . . . . . . . . <a href="#page-13">13</a>
<a href="#section-5.10">5.10</a>. Option with DNS Wire Format Domain Name List . . . . . . <a href="#page-14">14</a>
<a href="#section-6">6</a>. Avoid Conditional Formatting . . . . . . . . . . . . . . . . <a href="#page-15">15</a>
<a href="#section-7">7</a>. Avoid Aliasing . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-15">15</a>
<a href="#section-8">8</a>. Choosing between an FQDN and an Address . . . . . . . . . . . <a href="#page-16">16</a>
<a href="#section-9">9</a>. Encapsulated Options in DHCPv6 . . . . . . . . . . . . . . . <a href="#page-19">19</a>
<a href="#section-10">10</a>. Additional States Considered Harmful . . . . . . . . . . . . <a href="#page-20">20</a>
<a href="#section-11">11</a>. Configuration Changes Occur at Fixed Times . . . . . . . . . <a href="#page-21">21</a>
<a href="#section-12">12</a>. Multiple Provisioning Domains . . . . . . . . . . . . . . . . <a href="#page-21">21</a>
13. Chartering Requirements and Advice for Responsible Area
Directors . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-22">22</a>
<a href="#section-14">14</a>. Considerations for Creating New Formats . . . . . . . . . . . <a href="#page-23">23</a>
<a href="#section-15">15</a>. Option Size . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-23">23</a>
<a href="#section-16">16</a>. Singleton Options . . . . . . . . . . . . . . . . . . . . . . <a href="#page-24">24</a>
<a href="#section-17">17</a>. Option Order . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-25">25</a>
<a href="#section-18">18</a>. Relay Options . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-25">25</a>
<a href="#section-19">19</a>. Clients Request Their Options . . . . . . . . . . . . . . . . <a href="#page-26">26</a>
<a href="#section-20">20</a>. Transition Technologies . . . . . . . . . . . . . . . . . . . <a href="#page-26">26</a>
<a href="#section-21">21</a>. Recommended Sections in the New Document . . . . . . . . . . <a href="#page-27">27</a>
<a href="#section-21.1">21.1</a>. DHCPv6 Client Behavior Text . . . . . . . . . . . . . . <a href="#page-28">28</a>
<a href="#section-21.2">21.2</a>. DHCPv6 Server Behavior Text . . . . . . . . . . . . . . <a href="#page-28">28</a>
<a href="#section-21.3">21.3</a>. DHCPv6 Relay Agent Behavior Text . . . . . . . . . . . . <a href="#page-29">29</a>
<a href="#section-22">22</a>. Should the New Document Update Existing RFCs? . . . . . . . . <a href="#page-29">29</a>
<a href="#section-23">23</a>. Security Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-29">29</a>
<a href="#section-24">24</a>. Privacy Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-31">31</a>
<a href="#section-25">25</a>. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . <a href="#page-31">31</a>
<a href="#section-26">26</a>. References . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-31">31</a>
<a href="#section-26.1">26.1</a>. Normative References . . . . . . . . . . . . . . . . . . <a href="#page-31">31</a>
<a href="#section-26.2">26.2</a>. Informative References . . . . . . . . . . . . . . . . . <a href="#page-32">32</a>
<span class="grey">Hankins, et al. Best Current Practice [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
Most protocol developers ask themselves if a protocol will work, or
work efficiently. These are important questions, but another less
frequently considered question is whether the proposed protocol
presents itself needless barriers to adoption by deployed software.
DHCPv6 [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] software implementors are not merely faced with the
task of handling a given option's format on the wire. The option
must fit into every stage of the system's process, starting with the
user interface used to enter the configuration up to the machine
interfaces where configuration is ultimately consumed.
Another frequently overlooked aspect of rapid adoption is whether the
option requires operators to be intimately familiar with the option's
internal format in order to use it. Most DHCPv6 software provides a
facility for handling unknown options at the time of publication.
The handling of such options usually needs to be manually configured
by the operator. But, if doing so requires extensive reading (more
than can be covered in a simple FAQ, for example), it inhibits
adoption.
So, although a given solution would work, and might even be space,
time, or aesthetically optimal, a given option is presented with a
series of ever-worsening challenges to be adopted:
o If it doesn't fit neatly into existing configuration files.
o If it requires source code changes to be adopted and, hence,
upgrades of deployed software.
o If it does not share its deployment fate in a general manner with
other options, standing alone in requiring code changes or
reworking configuration file syntaxes.
o If the option would work well in the particular deployment
environment the proponents currently envision, but it has equally
valid uses in some other environment where the proposed option
format would fail or would produce inconsistent results.
There are many things DHCPv6 option creators can do to avoid the
pitfalls in this list entirely, or failing that, to make software
implementors' lives easier and improve its chances for widespread
adoption.
This document is envisaged as a help for protocol developers that
define new options and for expert reviewers that review submitted
proposals.
<span class="grey">Hankins, et al. Best Current Practice [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Requirements Language</span>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [<a href="./rfc2119" title=""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119</a>].
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. When to Use DHCPv6</span>
Principally, DHCPv6 carries configuration parameters for its clients.
Any knob, dial, slider, or checkbox on the client system, such as "my
domain name servers", "my hostname", or even "my shutdown
temperature", are candidates for being configured by DHCPv6.
The presence of such a knob isn't enough, because DHCPv6 also
presents the extension of an administrative domain -- the operator of
the network to which the client is currently attached. Someone runs
not only the local switching network infrastructure to which the
client is directly (or wirelessly) attached but the various methods
of accessing the external Internet via local assist services that the
network must also provide (such as domain name servers or routers).
This means that, even if a configuration parameter can be potentially
delivered by DHCPv6, it is necessary to evaluate whether it is
reasonable for this parameter to be under the control of the
administrator of whatever network a client is attached to at any
given time.
Note that the client is not required to configure any of these values
received via DHCPv6 (e.g., due to having these values locally
configured by its own administrator). But, it needs to be noted that
overriding DHCPv6-provided values may cause the client to be denied
certain services in the network to which it has attached. The
possibility of having a higher level of control over client node
configuration is one of the reasons that DHCPv6 is preferred in
enterprise networks.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. General Principles</span>
The primary guiding principle to follow in order to enhance an
option's adoptability is reuse. The option should be created in such
a way that does not require any new or special case software to
support. If old software that is currently deployed and in the field
can adopt the option through supplied configuration facilities, then
it's fairly certain that new software can formally adopt it easily.
There are at least two classes of DHCPv6 options: simple options,
which are provided explicitly to carry data from one side of the
DHCPv6 exchange to the other (such as name servers, domain names, or
time servers), and a protocol class of options, which require special
<span class="grey">Hankins, et al. Best Current Practice [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
processing on the part of the DHCPv6 software or are used during
special processing (such as the Fully Qualified Domain Name (FQDN)
option [<a href="./rfc4704" title=""The Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN) Option"">RFC4704</a>]), and so forth; these options carry data that is the
result of a routine in some DHCPv6 software.
The guidelines laid out here should be applied in a relaxed manner
for the protocol class of options. Wherever a special case code is
already required to adopt the DHCPv6 option, it is substantially more
reasonable to format the option in a less generic fashion, if there
are measurable benefits to doing so.
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. Reusing Other Option Formats</span>
The easiest approach to manufacturing trivially deployable DHCPv6
options is to assemble the option out of whatever common fragments
fit, possibly allowing a group of data elements to repeat to fill the
remaining space (if present) and thus provide multiple values. Place
all fixed-size values at the start of the option and any variable
-/indeterminate-sized values at the tail end of the option.
This means that implementations will likely be able to reuse code
paths designed to support the other options.
There is a trade-off between the adoptability of previously defined
option formats and the advantages that new or specialized formats can
provide. In general, it is usually preferable to reuse previously
used option formats.
However, it isn't very practical to consider the bulk of DHCPv6
options already allocated and to consider which of those solve a
similar problem. So, the following list of common option format data
elements is provided as shorthand. Please note that it is not
complete in terms of exampling every option format ever devised.
If more complex options are needed, those basic formats mentioned
here may be considered as primitives (or 'fragment types') that can
be used to build more complex formats. It should be noted that it is
often easier to implement two options with trivial formats than one
option with a more complex format. That is not an unconditional
requirement though. In some cases, splitting one complex option into
two or more simple options introduces inter-option dependencies that
should be avoided. In such a case, it is usually better to keep one
complex option.
<span class="grey">Hankins, et al. Best Current Practice [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h3"><a class="selflink" id="section-5.1" href="#section-5.1">5.1</a>. Option with IPv6 Addresses</span>
This option format is used to carry one or many IPv6 addresses. In
some cases, the number of allowed addresses is limited (e.g., to
one):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| ipv6-address |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| ipv6-address |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: Option with IPv6 Addresses
Examples of use:
o DHCPv6 Server Unicast Address [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] (a single address only)
o Session Initiation Protocol (SIP) Servers IPv6 Address List
[<a href="./rfc3319" title=""Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers"">RFC3319</a>]
o DNS Recursive Name Servers [<a href="./rfc3646" title=""DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3646</a>]
o Network Information Service (NIS) Servers [<a href="./rfc3898" title=""Network Information Service (NIS) Configuration Options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3898</a>]
o Simple Network Time Protocol (SNTP) Servers [<a href="./rfc4075" title=""Simple Network Time Protocol (SNTP) Configuration Option for DHCPv6"">RFC4075</a>]
o Broadcast and Multicast Service Controller IPv6 Address Option for
DHCPv6 [<a href="./rfc4280" title=""Dynamic Host Configuration Protocol (DHCP) Options for Broadcast and Multicast Control Servers"">RFC4280</a>]
o Mobile IPv6 (MIPv6) Home Agent Address [<a href="./rfc6610" title=""DHCP Options for Home Information Discovery in Mobile IPv6 (MIPv6)"">RFC6610</a>] (a single address
only)
o Network Time Protocol (NTP) Server Address [<a href="./rfc5908" title=""Network Time Protocol (NTP) Server Option for DHCPv6"">RFC5908</a>] (a single
address only)
<span class="grey">Hankins, et al. Best Current Practice [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
o NTP Multicast Address [<a href="./rfc5908" title=""Network Time Protocol (NTP) Server Option for DHCPv6"">RFC5908</a>] (a single address only)
<span class="h3"><a class="selflink" id="section-5.2" href="#section-5.2">5.2</a>. Option with Single Flag (Boolean)</span>
Sometimes, it is useful to convey a single flag that can take either
on or off values. Instead of specifying an option with 1 bit of
usable data and 7 bits of padding, it is better to define an option
without any content. It is the presence or absence of the option
that conveys the value. This approach has the additional benefit of
the absent option designating the default; that is, the administrator
has to take explicit actions to deploy the opposite of the default
value.
The absence of the option represents the default value, and the
presence of the option represents the other value, but that does not
necessarily mean that absence is "off" (or "false") and presence is
"on" (or "true"). That is, if it's desired that the default value
for a bistable option is "true"/"on", then the presence of that
option would turn it off (make it false). If the option presence
signifies an off/false state, that should be reflected in the option
name, e.g., OPTION_DISABLE_FOO.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: Option for Conveying Boolean
Examples of use:
o DHCPv6 Rapid Commit [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]
<span class="grey">Hankins, et al. Best Current Practice [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h3"><a class="selflink" id="section-5.3" href="#section-5.3">5.3</a>. Option with IPv6 Prefix</span>
Sometimes, there is a need to convey an IPv6 prefix. The information
to be carried by such an option includes the 128-bit IPv6 prefix
together with a length of this prefix taking values from 0 to 128.
Using the simplest approach, the option could convey this data in two
fixed-length fields: one carrying the prefix length and another
carrying the prefix. However, in many cases, /64 or shorter prefixes
are used. This implies that the large part of the prefix data
carried by the option would have its bits set to 0 and would be
unused. In order to avoid carrying unused data, it is recommended to
store the prefix in the variable-length data field. The appropriate
option format is defined as follows:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| prefix6len | ipv6-prefix |
+-+-+-+-+-+-+-+-+ (variable length) |
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: Option with IPv6 Prefix
option-length is set to 1 + length of the IPv6 prefix.
prefix6len is 1 octet long and specifies the length in bits of the
IPv6 prefix. Typically allowed values are 0 to 128.
The ipv6-prefix field is a variable-length field that specifies the
IPv6 prefix. The length is (prefix6len + 7) / 8. This field is
padded with 0 bits up to the nearest octet boundary when prefix6len
is not divisible by 8.
Examples of use:
o Default Mapping Rule [<a href="#ref-MAP" title=""DHCPv6 Options for configuration of Softwire Address and Port Mapped Clients"">MAP</a>]
For example, the prefix 2001:db8::/60 would be encoded with an
option-length of 9, prefix6-len would be set to 60, and the
ipv6-prefix would be 8 octets and would contain octets 20 01 0d b8 00
00 00 00.
It should be noted that the IAPREFIX option defined by [<a href="./rfc3633" title=""IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP) version 6"">RFC3633</a>] uses
a full-length 16-octet prefix field. The concern about option length
was not well understood at the time of its publication.
<span class="grey">Hankins, et al. Best Current Practice [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h3"><a class="selflink" id="section-5.4" href="#section-5.4">5.4</a>. Option with 32-bit Integer Value</span>
This option format can be used to carry a 32-bit signed or unsigned
integer value:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32-bit-integer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: Option with 32-bit Integer Value
Examples of use:
o Information Refresh Time [<a href="./rfc4242" title=""Information Refresh Time Option for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC4242</a>]
<span class="h3"><a class="selflink" id="section-5.5" href="#section-5.5">5.5</a>. Option with 16-bit Integer Value</span>
This option format can be used to carry 16-bit signed or unsigned
integer values:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 16-bit-integer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: Option with 16-bit Integer Value
Examples of use:
o Elapsed Time [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]
<span class="grey">Hankins, et al. Best Current Practice [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h3"><a class="selflink" id="section-5.6" href="#section-5.6">5.6</a>. Option with 8-bit Integer Value</span>
This option format can be used to carry 8-bit integer values:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 8-bit-integer |
+-+-+-+-+-+-+-+-+
Figure 6: Option with 8-bit Integer Value
Examples of use:
o DHCPv6 Preference [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]
<span class="h3"><a class="selflink" id="section-5.7" href="#section-5.7">5.7</a>. Option with URI</span>
A Uniform Resource Identifier (URI) [<a href="./rfc3986" title=""Uniform Resource Identifier (URI): Generic Syntax"">RFC3986</a>] is a compact sequence
of characters that identifies an abstract or physical resource. The
term "Uniform Resource Locator" (URL) refers to the subset of URIs
that, in addition to identifying a resource, provide a means of
locating the resource by describing its primary access mechanism
(e.g., its network "location"). This option format can be used to
carry a single URI:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. URI (variable length) .
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 7: Option with URI
<span class="grey">Hankins, et al. Best Current Practice [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
Examples of use:
o Boot File URL [<a href="./rfc5970" title=""DHCPv6 Options for Network Boot"">RFC5970</a>]
An alternate encoding to support multiple URIs is available. An
option must be defined to use either the single URI format above or
the multiple URI format below depending on whether a single URI is
always sufficient or if multiple URIs are possible.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. uri-data .
. . . . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 8: Option with Multiple URIs
Each instance of the uri-data is formatted as follows:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
| uri-len | URI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
The uri-len is 2 octets long and specifies the length of the URI
data. Although the URI format in theory supports up to 64 KB of
data, in practice, large chunks of data may be problematic. See
<a href="#section-15">Section 15</a> for details.
<span class="h3"><a class="selflink" id="section-5.8" href="#section-5.8">5.8</a>. Option with Text String</span>
A text string is a sequence of characters that have no semantics.
The encoding of the text string MUST be specified. Unless otherwise
specified, all text strings in newly defined options are expected to
be Unicode strings that are encoded using UTF-8 [<a href="./rfc3629" title=""UTF-8, a transformation format of ISO 10646"">RFC3629</a>] in Net-
Unicode form [<a href="./rfc5198" title=""Unicode Format for Network Interchange"">RFC5198</a>]. Please note that all strings containing only
7-bit ASCII characters are also valid UTF-8 Net-Unicode strings.
If a data format has semantics other than just being text, it is not
a string; e.g., an FQDN is not a string, and a URI is also not a
string because they have different semantics. A string must not
include any terminator (such as a null byte). The null byte is
treated as any other character and does not have any special meaning.
This option format can be used to carry a text string:
<span class="grey">Hankins, et al. Best Current Practice [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. String .
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 9: Option with Text String
Examples of use:
o Timezone Options for DHCPv6 [<a href="./rfc4833" title=""Timezone Options for DHCP"">RFC4833</a>]
An alternate encoding to support multiple text strings is available.
An option must be defined to use either the single text string format
above or the multiple text string format below, depending on whether
a single text string is always sufficient or if multiple text strings
are possible.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. text-data .
. . . . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 10: Option with Multiple Text Strings
Each instance of the text-data is formatted as follows:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
| text-len | String |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
The text-len is 2 octets long and specifies the length of the string.
<span class="h3"><a class="selflink" id="section-5.9" href="#section-5.9">5.9</a>. Option with Variable-Length Data</span>
This option can be used to carry variable-length data of any kind.
Internal representation of carried data is option specific. Whenever
this format is used by the new option being defined, the data
encoding should be documented.
<span class="grey">Hankins, et al. Best Current Practice [Page 13]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-14" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
This option format provides a lot of flexibility to pass data of
almost any kind. Though, whenever possible, it is highly recommended
to use more specialized options, with field types better matching
carried data types.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. variable-length data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 11: Option with Variable-Length Data
Examples of use:
o Client Identifier [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]
o Server Identifier [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]
<span class="h3"><a class="selflink" id="section-5.10" href="#section-5.10">5.10</a>. Option with DNS Wire Format Domain Name List</span>
This option is used to carry 'domain search' lists or any host or
domain name. It uses the same format as described in <a href="#section-5.9">Section 5.9</a> but
with the special data encoding, as described in <a href="./rfc3315#section-8">Section 8 of
[RFC3315]</a>. This data encoding supports carrying multiple instances
of hosts or domain names in a single option by terminating each
instance with the byte value of 0.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DNS Wire Format Domain Name List |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 12: Option with DNS Wire Format Domain Name List
Examples of use:
o SIP Servers Domain Name List [<a href="./rfc3319" title=""Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers"">RFC3319</a>] (many domains)
o NIS Domain Name [<a href="./rfc3898" title=""Network Information Service (NIS) Configuration Options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3898</a>] (many domains)
<span class="grey">Hankins, et al. Best Current Practice [Page 14]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-15" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
o Location-to-Service Translation (LoST) Server Domain Name
[<a href="./rfc5223" title=""Discovering Location-to-Service Translation (LoST) Servers Using the Dynamic Host Configuration Protocol (DHCP)"">RFC5223</a>]
o Location Information Server (LIS) Domain Name [<a href="./rfc5986" title=""Discovering the Local Location Information Server (LIS)"">RFC5986</a>]
o Dual-Stack Lite (DS-Lite) Address Family Transition Router (AFTR)
Location [<a href="./rfc6334" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Option for Dual-Stack Lite"">RFC6334</a>] (a single FQDN)
o Home Network Identifier [<a href="./rfc6610" title=""DHCP Options for Home Information Discovery in Mobile IPv6 (MIPv6)"">RFC6610</a>] (a single FQDN)
o Home Agent FQDN [<a href="./rfc6610" title=""DHCP Options for Home Information Discovery in Mobile IPv6 (MIPv6)"">RFC6610</a>] (a single FQDN)
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Avoid Conditional Formatting</span>
Placing an octet at the start of the option that informs the software
how to process the remaining octets of the option may appear simple
to the casual observer. But, the only conditional formatting methods
that are in widespread use today are 'protocol' class options.
Therefore, conditional formatting requires new code to be written and
complicates future interoperability should new conditional formats be
added; existing code has to ignore conditional formats that it does
not support.
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. Avoid Aliasing</span>
Options are said to be aliases of each other if they provide input to
the same configuration parameter. A commonly proposed example is to
configure the location of some new service ("my foo server") using a
binary IP address, a domain name field, and a URL. This kind of
aliasing is undesirable and is not recommended.
In this case, where three different formats are supposed, it more
than triples the work of the software involved, requiring support for
not merely one format but support to produce and digest all three.
Furthermore, code development and testing must cover all possible
combinations of defined formats. Since clients cannot predict what
values the server will provide, they must request all formats. So,
in the case where the server is configured with all formats, DHCPv6
message bandwidth is wasted on option contents that are redundant.
Also, the DHCPv6 option number space is wasted, as three new option
codes are required rather than one.
It also becomes unclear which types of values are mandatory and how
configuring some of the options may influence the others. For
example, if an operator configures the URL only, should the server
synthesize a domain name and an IP address?
<span class="grey">Hankins, et al. Best Current Practice [Page 15]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-16" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
A single configuration value on a host is probably presented to the
operator (or other software on the machine) in a single field or
channel. If that channel has a natural format, then any alternative
formats merely make more work for intervening software in providing
conversions.
So, the best advice is to choose the one method that best fulfills
the requirements for simplicity (such as with an IP address and a
port pair), late binding (such as with DNS), or completeness (such as
with a URL).
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. Choosing between an FQDN and an Address</span>
Some parameters may be specified as an FQDN or an address. In most
cases, one or the other should be used. This section discusses pros
and cons of each approach and is intended to help make an informed
decision in that regard. It is strongly discouraged to define both
option types at the same time (see <a href="#section-7">Section 7</a>), unless there is
sufficient motivation to do so.
There is no single recommendation that works for every case. It very
much depends on the nature of the parameter being configured. For
parameters that are network specific or represent certain aspects of
network infrastructure, like available mobility services, in most
cases addresses are a more usable choice. For parameters that can be
considered an application-specific configuration, like SIP servers,
it is usually better to use an FQDN.
Applications are often better suited to deal with FQDN failures than
with address failures. Most operating systems provide a way to retry
an FQDN resolution if the previous attempt fails. That type of error
recovery is supported by a great number of applications. On the
other hand, there is typically no API available for applications to
reconfigure over DHCP to get a new address value if the one received
is no longer appropriate. This problem may be usually addressed by
providing a list of addresses rather than just a single one. That,
on the other hand, requires a defined procedure on how multiple
addresses should be used (all at once, round robin, try first and
fail over to the next if it fails, etc.).
An FQDN provides a higher level of indirection and ambiguity. In
many cases, that may be considered a benefit, but it can be
considered a flaw in others. For example, one operator suggested
that the same name be resolved to different addresses, depending on
the point of attachment of the host doing the resolution. This is
one way to provide localized addressing. However, in order to do
this, it is necessary to violate the DNS convention that a query on a
particular name should always return the same answer (aside from the
<span class="grey">Hankins, et al. Best Current Practice [Page 16]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-17" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
ordering of IP addresses in the response, which is supposed to be
varied by the name server). This same locality of reference for
configuration information can be achieved directly using DHCP, since
the DHCP server must know the network topology in order to provide IP
address or prefix configuration.
The other type of ambiguity is related to multiple provisioning
domains (see <a href="#section-12">Section 12</a>). The stub resolver on the DHCP client
cannot at present be assumed to make the DNS query for a DHCP-
supplied FQDN on the same interface on which it received its DHCP
configuration and may, therefore, get a different answer from the DNS
than was intended.
This is particularly a problem when the normal expected use of the
option makes sense with a private DNS zone(s), as might be the case
on an enterprise network. It may also be the case that the client
has an explicit DNS server configured and may, therefore, never query
the enterprise network's internal DNS server.
An FQDN does require a resolution into an actual address. This
implies the question as to when the FQDN resolution should be
conducted. There are a couple of possible answers: a) by the server,
when it is started, b) by the server, when it is about to send an
option, c) by the client, immediately after receiving an option, and
d) by the client, when the content of the option is actually
consumed. For a), b), and possibly c), the option should really
convey an address, not an FQDN. The only real incentive to use an
FQDN is case d). It is the only case that allows possible changes in
the DNS to be picked up by clients.
If the parameter is expected to be used by constrained devices (low
power, battery operated, and low capabilities) or in very lossy
networks, it may be appealing to drop the requirement of performing
the DNS resolution and use addresses. Another example of a
constrained device is a network-booted device, where despite the fact
that the node itself is very capable once it's booted, the boot prom
is quite constrained.
Another aspect that should be considered is time required for the
clients to notice any configuration changes. Consider a case where a
server configures service A using an address and service B using an
FQDN. When an administrator decides to update the configuration, he
or she can update the DHCP server configuration to change both
services. If the clients do not support reconfigure (which is an
optional feature of <a href="./rfc3315">RFC 3315</a> but in some environments, e.g., cable
modems, is mandatory), the configuration will be updated on the
clients after the T1 timer elapses. Depending on the nature of the
change (is it a new server added to a cluster of already operating
<span class="grey">Hankins, et al. Best Current Practice [Page 17]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-18" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
servers or a new server that replaces the only available server that
crashed?), this may be an issue. On the other hand, updating service
B may be achieved with a DNS record update. That information may be
cached by caching DNS servers for up to Time to Live (TTL).
Depending on the values of T1 and TTL, one update may be faster than
another. Furthermore, depending on the nature of the change (planned
modification or unexpected failure), T1 or TTL may be lowered before
the change to speed up new configuration adoption.
Simply speaking, protocol designers don't know what the TTL or the T1
time will be, so they can't make assumptions about whether a DHCP
option will be refreshed more quickly based on T1 or TTL.
Addresses have the benefit of being easier to implement and handle by
the DHCP software. An address option is simpler to use, has
validation that is trivial (multiple of 16 constitutes a valid
option), is explicit, and does not allow any ambiguity. It is faster
(does not require extra round-trip time), so it is more efficient,
which can be especially important for energy-restricted devices. It
also does not require that the client implements a DNS resolution.
An FQDN imposes a number of additional failure modes and issues that
should be dealt with:
1. The client must have knowledge about available DNS servers. That
typically means that option DNS_SERVERS [<a href="./rfc3646" title=""DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3646</a>] is mandatory.
This should be mentioned in the document that defines the new
option. It is possible that the server will return the FQDN
option but not the DNS server's option. There should be a brief
discussion about it;
2. The DNS may not be reachable;
3. The DNS may be available but may not have appropriate information
(e.g., no AAAA records for the specified FQDN);
4. The address family must be specified (A, AAAA, or any); the
information being configured may require a specific address
family (e.g., IPv6), but there may be a DNS record only of
another type (e.g., A only with an IPv4 address).
5. What should the client do if there are multiple records available
(use only the first one, use all, use one and switch to the
second if the first fails for whatever reason, etc.). This may
be an issue if there is an expectation that the parameter being
configured will need exactly one address;
<span class="grey">Hankins, et al. Best Current Practice [Page 18]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-19" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
6. Multihomed devices may be connected to different administrative
domains with each domain providing different information in the
DNS (e.g., an enterprise network exposing private domains). The
client may send DNS queries to a different DNS server; and
7. It should be mentioned if Internationalized Domain Names are
allowed. If they are, DNS option encoding should be specified.
Address options that are used with overly long T1 (renew timer)
values have some characteristics of hard-coded values. That is
strongly discouraged. See [<a href="./rfc4085" title=""Embedding Globally-Routable Internet Addresses Considered Harmful"">RFC4085</a>] for an in-depth discussion. If
the option may appear in Information-request, its lifetime should be
controlled using the information refresh time option [<a href="./rfc4242" title=""Information Refresh Time Option for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC4242</a>].
One specific case that makes the choice between an address and an
FQDN not obvious is a DNS Security (DNSSEC) bootstrap scenario.
DNSSEC validation imposes a requirement for clock sync (to the
accuracy reasonably required to consider signature inception and
expiry times). This often implies usage of NTP configuration.
However, if NTP is provided as an FQDN, there is no way to validate
its DNSSEC signature. This is a somewhat weak argument though, as
providing an NTP server as an address is also not verifiable using
DNSSEC. If the trustworthiness of the configuration provided by the
DHCP server is in question, DHCPv6 offers mechanisms that allow
server authentication.
<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a>. Encapsulated Options in DHCPv6</span>
Most options are conveyed in a DHCPv6 message directly. Although
there is no codified normative language for such options, they are
often referred to as top-level options. Many options may include
other options. Such inner options are often referred to as
encapsulated or nested options. Those options are sometimes called
sub-options, but this term actually means something else and,
therefore, should never be used to describe encapsulated options. It
is recommended to use the term "encapsulated" as this terminology is
used in [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]. The difference between encapsulated and sub-
options is that the former uses normal DHCPv6 option numbers, while
the latter uses option number space specific to a given parent
option. It should be noted that, contrary to DHCPv4, there is no
shortage of option numbers; therefore, almost all options share a
common option space. For example, option type 1 meant different
things in DHCPv4, depending if it was located in the top level or
inside of the Relay Agent Information option. There is no such
ambiguity in DHCPv6 (with the exception of [<a href="./rfc5908" title=""Network Time Protocol (NTP) Server Option for DHCPv6"">RFC5908</a>], which SHOULD
NOT be used as a template for future DHCP option definitions).
<span class="grey">Hankins, et al. Best Current Practice [Page 19]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-20" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
From the implementation perspective, it is easier to implement
encapsulated options rather than sub-options, as the implementors do
not have to deal with separate option spaces and can use the same
buffer parser in several places throughout the code.
Such encapsulation is not limited to one level. There is at least
one defined option that is encapsulated twice: Identity Association
for Prefix Delegation (IA_PD), as defined in <a href="./rfc3633#section-9">Section 9 of [RFC3633]</a>,
conveys the Identity Association (IA) Prefix (IAPREFIX), as defined
in <a href="./rfc3633#section-10">Section 10 of [RFC3633]</a>. Such a delegated prefix may contain an
excluded prefix range that is represented by the PD_EXCLUDE option
that is conveyed as encapsulated inside IAPREFIX (PD_EXCLUDE is
defined in [<a href="./rfc6603" title=""Prefix Exclude Option for DHCPv6-based Prefix Delegation"">RFC6603</a>]). It seems awkward to refer to such options as
sub-sub-option or doubly encapsulated option; therefore, the
"encapsulated option" term is typically used, regardless of the
nesting level.
When defining a DHCP-based configuration mechanism for a protocol
that requires something more complex than a single option, it may be
tempting to group configuration values using sub-options. That
should preferably be avoided, as it increases complexity of the
parser. It is much easier, faster, and less error prone to parse a
large number of options on a single (top-level) scope than to parse
options on several scopes. The use of sub-options should be avoided
as much as possible, but it is better to use sub-options rather than
conditional formatting.
It should be noted that currently there is no clear way defined for
requesting sub-options. Most known implementations are simply using
the top-level Option Request Option (ORO) for requesting both top-
level and encapsulated options.
<span class="h2"><a class="selflink" id="section-10" href="#section-10">10</a>. Additional States Considered Harmful</span>
DHCP is designed for provisioning clients. Less experienced protocol
designers often assume that it is easy to define an option that will
convey a different parameter for each client in a network. Such
problems arose during designs of the Mapping of Address and Port
(MAP) [<a href="#ref-MAP" title=""DHCPv6 Options for configuration of Softwire Address and Port Mapped Clients"">MAP</a>] and IPv4 Residual Deployment (4rd) [<a href="#ref-SOLUTION-4rd">SOLUTION-4rd</a>]. While
it would be easier for provisioned clients to get ready to use per-
client option values, such a requirement puts exceedingly large loads
on the server side. The new extensions may introduce new
implementation complexity and additional database state on the
server. Alternatives should be considered, if possible. As an
example, [<a href="#ref-MAP" title=""DHCPv6 Options for configuration of Softwire Address and Port Mapped Clients"">MAP</a>] was designed in a way that all clients are provisioned
with the same set of MAP options, and each provisioned client uses
its unique address and delegated prefix to generate client-specific
<span class="grey">Hankins, et al. Best Current Practice [Page 20]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-21" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
information. Such a solution does not introduce any additional state
for the server and, therefore, scales better.
It also should be noted that contrary to DHCPv4, DHCPv6 keeps several
timers for renewals. Each IA_NA (addresses) and IA_PD (prefixes)
contains T1 and T2 timers that designate time after which the client
will initiate renewal. Those timers apply only to their associated
IA containers. Refreshing other parameters should be initiated after
a time specified in the information refresh time option (defined in
[<a href="./rfc4242" title=""Information Refresh Time Option for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC4242</a>]), carried in the Reply message, and returned in response to
the Information-request message. Introducing additional timers make
deployment unnecessarily complex and SHOULD be avoided.
<span class="h2"><a class="selflink" id="section-11" href="#section-11">11</a>. Configuration Changes Occur at Fixed Times</span>
In general, DHCPv6 clients only refresh configuration data from the
DHCP server when the T1 timer expires. Although there is a
Reconfigure mechanism that allows a DHCP server to request that
clients initiate reconfiguration, support for this mechanism is
optional and cannot be relied upon.
Even when DHCP clients refresh their configuration information, not
all consumers of DHCP-sourced configuration data notice these
changes. For instance, if a server is started using parameters
received in an early DHCP transaction, but does not check for updates
from DHCP, it may well continue to use the same parameter
indefinitely. There are a few operating systems that take care of
reconfiguring services when the client moves to a new network (e.g.,
based on mechanisms like [<a href="./rfc4436" title=""Detecting Network Attachment in IPv4 (DNAv4)"">RFC4436</a>], [<a href="./rfc4957" title=""Link-Layer Event Notifications for Detecting Network Attachments"">RFC4957</a>], or [<a href="./rfc6059" title=""Simple Procedures for Detecting Network Attachment in IPv6"">RFC6059</a>]), but
it's worth bearing in mind that a renew may not always result in the
client taking up new configuration information that it receives.
In light of the above, when designing an option you should take into
consideration the fact that your option may hold stale data that will
only be updated at an arbitrary time in the future.
<span class="h2"><a class="selflink" id="section-12" href="#section-12">12</a>. Multiple Provisioning Domains</span>
In some cases, there could be more than one DHCPv6 server on a link,
with each providing a different set of parameters. One notable
example of such a case is a home network with a connection to two
independent ISPs.
The DHCPv6 specification does not provide clear advice on how to
handle multiple provisioning sources. Although [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] states that
a client that receives more than one Advertise message may respond to
one or more of them, such capability has not been observed in
existing implementations. Existing clients will pick one server and
<span class="grey">Hankins, et al. Best Current Practice [Page 21]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-22" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
will continue the configuration process with that server, ignoring
all other servers.
In addition, a node that acts as a DHCPv6 client may be connected to
more than one physical network. In most cases, it will operate a
separate DHCP client state machine on each interface and acquire
different, possibly conflicting, information through each. This
information will not be acquired in any synchronized way.
Existing nodes cannot be assumed to systematically segregate
configuration information on the basis of its source; as a result, it
is quite possible that a node may receive an FQDN on one network
interface but do the DNS resolution on a different network interface,
using different DNS servers. As a consequence, DNS resolution done
by the DHCP server is more likely to behave predictably than DNS
resolution done on a multi-interface or multihomed client.
This is a generic DHCP issue and should not be dealt within each
option separately. This issue is better dealt with using a protocol-
level solution, and fixing this problem should not be attempted on a
per-option basis. Work is ongoing in the IETF to provide a
systematic solution to this problem.
<span class="h2"><a class="selflink" id="section-13" href="#section-13">13</a>. Chartering Requirements and Advice for Responsible Area Directors</span>
Adding a simple DHCP option is straightforward and generally
something that any working group (WG) can do, perhaps with some help
from designated DHCP experts. However, when new fragment types need
to be devised, this requires the attention of DHCP experts and should
not be done in a WG that doesn't have a quorum of such experts. This
is true whether the new fragment type has the same structure as an
existing fragment type but with different semantics, or the new
format has a new structure.
Responsible Area Directors for WGs that wish to add a work item to a
WG charter to define a new DHCP option should get clarity from the WG
as to whether the new option will require a new fragment type or new
semantics, or whether it is a simple DHCP option that fits existing
definitions.
If a WG needs a new fragment type, it is preferable to see if another
WG exists whose members already have sufficient expertise to evaluate
the new work. If such a working group is available, the work should
be chartered in that working group instead. If there is no other WG
with DHCP expertise that can define the new fragment type, the
responsible AD should seek help from known DHCP experts within the
IETF to provide advice and frequent early review as the original WG
defines the new fragment type.
<span class="grey">Hankins, et al. Best Current Practice [Page 22]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-23" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
In either case, the new option should be defined in a separate
document, and the work should focus on defining a new format that
generalizes well and can be reused, rather than a single-use fragment
type. The WG that needs the new fragment type can define their new
option referencing the new fragment type document, and the work can
generally be done in parallel, avoiding unnecessary delays. Having
the definition in its own document will foster reuse of the new
fragment type.
The responsible AD should work with all relevant WG Chairs and DHCP
experts to ensure that the new fragment type document has in fact
been carefully reviewed by the experts and appears satisfactory.
Responsible Area Directors for WGs that are considering defining
options that actually update DHCP, as opposed to simple options,
should go through a process similar to that described above when
trying to determine where to do the work. Under no circumstances
should a WG be given a charter deliverable to define a new DHCP
option, and then on the basis of that charter item actually make
updates to DHCP.
<span class="h2"><a class="selflink" id="section-14" href="#section-14">14</a>. Considerations for Creating New Formats</span>
When defining new options, one specific consideration to evaluate is
whether or not options of a similar format would need to have
multiple or single values encoded (whatever differs from the current
option) and how that might be accomplished in a similar format.
When defining a new option, it is best to synthesize the option
format using fragment types already in use. However, in some cases,
there may be no fragment type that accomplishes the intended purpose.
The matter of size considerations and option order are further
discussed in Sections <a href="#section-15">15</a> and <a href="#section-17">17</a>.
<span class="h2"><a class="selflink" id="section-15" href="#section-15">15</a>. Option Size</span>
DHCPv6 [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] allows for packet sizes up to 64 KB. First, through
its use of link-local addresses, it avoids many of the deployment
problems that plague DHCPv4 and is actually a UDP over the IPv6-based
protocol (compared to DHCPv4, which is mostly UDP over IPv4 but with
layer-2 hacks). Second, <a href="./rfc3315">RFC 3315</a> explicitly refers readers to
<a href="./rfc2460#section-5">Section 5 of [RFC2460]</a>, which describes an MTU of 1280 octets and a
minimum fragment reassembly of 1500 octets. It's feasible to suggest
that DHCPv6 is capable of having larger options deployed over it, and
at least no common upper limit is yet known to have been encoded by
its implementors. It is not really possible to describe a fixed
<span class="grey">Hankins, et al. Best Current Practice [Page 23]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-24" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
limit that cleanly divides workable option sizes from those that are
too big.
It is advantageous to prefer option formats that contain the desired
information in the smallest form factor that satisfies the
requirements. Common sense still applies here. It is better to
split distinct values into separate octets rather than propose overly
complex bit-shifting operations to save several bits (or even an
octet or two) that would be padded to the next octet boundary anyway.
DHCPv6 does allow for multiple instances of a given option, and they
are treated as distinct values following the defined format; however,
this feature is generally preferred to be restricted to protocol
class features (such as the IA_* series of options). In such cases,
it is better to define an option as an array if it is possible. It
is recommended to clarify (with normative language) whether a given
DHCPv6 option may appear once or multiple times. The default
assumption is only once.
In general, if a lot of data needs to be configured (for example,
some option lengths are quite large), DHCPv6 may not be the best
choice to deliver such configuration information and SHOULD simply be
used to deliver a URI that specifies where to obtain the actual
configuration information.
<span class="h2"><a class="selflink" id="section-16" href="#section-16">16</a>. Singleton Options</span>
Although [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] states that each option type MAY appear more than
once, the original idea was that multiple instances are reserved for
stateful options, like IA_NA or IA_PD. For most other options, it is
usually expected that they will appear once at most. Such options
are called singleton options. Sadly, RFCs have often failed to
clearly specify whether or not a given option can appear more than
once.
Documents that define new options SHOULD state whether or not these
options are singletons. Unless otherwise specified, newly defined
options are considered to be singletons. If multiple instances are
allowed, the document MUST explain how to use them. Care should be
taken not to assume that they will be processed in the order they
appear in the message. See <a href="#section-17">Section 17</a> for more details.
When deciding whether single or multiple option instances are allowed
in a message, take into consideration how the content of the option
will be used. Depending on the service being configured, it may or
may not make sense to have multiple values configured. If multiple
values make sense, it is better to explicitly allow that by using an
option format that allows multiple values within one option instance.
<span class="grey">Hankins, et al. Best Current Practice [Page 24]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-25" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
Allowing multiple option instances often leads to confusion.
Consider the following example. Basic DS-Lite architecture assumes
that the B4 element (DHCPv6 client) will receive the AFTR option and
establish a single tunnel to the configured tunnel termination point
(AFTR). During the standardization process of [<a href="./rfc6334" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Option for Dual-Stack Lite"">RFC6334</a>], there was a
discussion whether multiple instances of the DS-Lite tunnel option
should be allowed. This created an unfounded expectation that the
clients receiving multiple instances of the option will somehow know
when one tunnel endpoint goes offline and do some sort of failover
between other values provided in other instances of the AFTR option.
Others assumed that if there are multiple options, the client will
somehow do load balancing between the provided tunnel endpoints.
Neither failover nor load balancing was defined for the DS-Lite
architecture, so it caused confusion. It was eventually decided to
allow only one instance of the AFTR option.
<span class="h2"><a class="selflink" id="section-17" href="#section-17">17</a>. Option Order</span>
Option order, either the order among many DHCPv6 options or the order
of multiple instances of the same option, SHOULD NOT be significant.
New documents MUST NOT assume any specific option processing order.
As there is no explicit order for multiple instances of the same
option, an option definition SHOULD instead restrict ordering by
using a single option that contains ordered fields.
As [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] does not impose option order, some implementations use
hash tables to store received options (which is a conformant
behavior). Depending on the hash implementation, the processing
order is almost always different then the order in which the options
appeared in the packet on the wire.
<span class="h2"><a class="selflink" id="section-18" href="#section-18">18</a>. Relay Options</span>
In DHCPv4, all relay options are organized as sub-options within the
DHCP Relay Agent Information option [<a href="./rfc3046" title=""DHCP Relay Agent Information Option"">RFC3046</a>]. And, an independent
number space called "DHCP Relay Agent Sub-options" is maintained by
IANA. Different from DHCPv4, in DHCPv6, relay options are defined in
the same way as client/server options, and they also use the same
option number space as client/server options. Future DHCPv6 relay
options MUST be allocated from this single DHCPv6 option number
space.
For example, the Relay-Supplied Options option [<a href="./rfc6422" title=""Relay-Supplied DHCP Options"">RFC6422</a>] may also
contain some DHCPv6 options as permitted, such as the Extensible
Authentication Protocol (EAP) Re-authentication Protocol (ERP) Local
Domain Name DHCPv6 Option [<a href="./rfc6440" title=""The EAP Re-authentication Protocol (ERP) Local Domain Name DHCPv6 Option"">RFC6440</a>].
<span class="grey">Hankins, et al. Best Current Practice [Page 25]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-26" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h2"><a class="selflink" id="section-19" href="#section-19">19</a>. Clients Request Their Options</span>
The DHCPv6 Option Request Option (OPTION_ORO) [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] is an option
that serves two purposes -- to inform the server what options the
client supports and what options the client is willing to consume.
For some options, such as the options required for the functioning of
DHCPv6 itself, it doesn't make sense to require that they be
explicitly requested using the Option Request Option. In all other
cases, it is prudent to assume that any new option must be present on
the relevant option request list if the client desires to receive it.
It is tempting to add text that requires the client to include a new
option in the Option Request Option list, similar to this text:
"Clients MUST place the foo option code on the Option Request Option
list, clients MAY include option foo in their packets as hints for
the server as values the desire, and servers MUST include option foo
when the client requests it (and the server has been so configured)".
Such text is discouraged as there are several issues with it. First,
it assumes that client implementation that supports a given option
will always want to use it. This is not true. The second and more
important reason is that such text essentially duplicates the
mechanism already defined in [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]. It is better to simply refer
to the existing mechanism rather than define it again. See
<a href="#section-21">Section 21</a> for proposed examples on how to do that.
Creators of DHCPv6 options cannot assume special ordering of options
either as they appear in the Option Request Option or as they appear
within the packet. Although it is reasonable to expect that options
will be processed in the order they appear in ORO, server software is
not required to sort DHCPv6 options into the same order in Reply
messages.
It should also be noted that options values are not required to be
aligned within the DHCP packet; even the option code and option
length may appear on odd-byte boundaries.
<span class="h2"><a class="selflink" id="section-20" href="#section-20">20</a>. Transition Technologies</span>
The transition from IPv4 to IPv6 is progressing. Many transition
technologies are proposed to speed it up. As a natural consequence,
there are also DHCP options proposed to provision those proposals.
The inevitable question is whether the required parameters should be
delivered over DHCPv4 or DHCPv6. Authors often don't give much
thought about it and simply pick DHCPv6 without realizing the
consequences. IPv6 is expected to stay with us for many decades, and
so is DHCPv6. There is no mechanism available to deprecate an option
in DHCPv6, so any options defined will stay with us as long as the
<span class="grey">Hankins, et al. Best Current Practice [Page 26]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-27" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
DHCPv6 protocol itself lasts. It seems likely that such options
defined to transition from IPv4 will outlive IPv4 by many decades.
From that perspective, it is better to implement provisioning of the
transition technologies in DHCPv4, which will be obsoleted together
with IPv4.
When the network infrastructure becomes IPv6 only, the support for
IPv4-only nodes may still be needed. In such a scenario, a mechanism
for providing IPv4 configuration information over IPv6-only networks
may be needed. See [<a href="#ref-IPv4-CONFIG">IPv4-CONFIG</a>] for further details.
<span class="h2"><a class="selflink" id="section-21" href="#section-21">21</a>. Recommended Sections in the New Document</span>
There are three major entities in DHCPv6: server, relay agent, and
client. It is very helpful for implementors to include separate
sections that describe operation for those three major entities.
Even when a given entity does not participate, it is useful to have a
very short section stating that it must not send a given option and
must ignore it when received.
There is also a separate entity called the "requestor", which is a
special client-like type that participates in the leasequery protocol
[<a href="./rfc5007" title=""DHCPv6 Leasequery"">RFC5007</a>] [<a href="./rfc5460" title=""DHCPv6 Bulk Leasequery"">RFC5460</a>]. A similar section for the requestor is not
required, unless the new option has anything to do with the requestor
(or it is likely that the reader may think that is has). It should
be noted that while in the majority of deployments the requestor is
co-located with the relay agent, those are two separate entities from
the protocol perspective, and they may be used separately. There are
stand-alone requestor implementations available.
The following sections include proposed text for such sections. That
text is not required to appear, but it is appropriate in most cases.
Additional or modified text specific to a given option is often
required.
Although the requestor is a somewhat uncommon functionality, its
existence should be noted, especially when allowing or disallowing
options to appear in certain messages or to be sent by certain
entities. Additional message types may appear in the future, besides
types defined in [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>]. Therefore, authors are encouraged to
familiarize themselves with a list of currently defined DHCPv6
messages available on the IANA website [<a href="#ref-IANA" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">IANA</a>].
Typically, new options are requested by clients and assigned by the
server, so there is no specific relay behavior. Nevertheless, it is
good to include a section for relay agent behavior and simply state
<span class="grey">Hankins, et al. Best Current Practice [Page 27]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-28" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
that there are no additional requirements for relays. The same
applies for client behavior if the options are to be exchanged
between the relay and server.
Sections that contain option definitions MUST include a formal
verification procedure. Often it is very simple, e.g., an option
that conveys an IPv6 address must be exactly 16-bytes long, but
sometimes the rules are more complex. It is recommended to refer to
existing documents (e.g., <a href="./rfc3315#section-8">Section 8 of RFC 3315</a> for domain name
encoding) rather than trying to repeat such rules.
<span class="h3"><a class="selflink" id="section-21.1" href="#section-21.1">21.1</a>. DHCPv6 Client Behavior Text</span>
Clients MAY request option foo, as defined in [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>], Sections
17.1.1, 18.1.1, 18.1.3, 18.1.4, 18.1.5, and 22.7. As a convenience
to the reader, we mention here that the client includes requested
option codes in the Option Request Option.
Optional text (if the client's hints make sense): The client also MAY
include option foo in its Solicit, Request, Renew, Rebind, and
Information-request messages as a hint for the server regarding
preferred option values.
Optional text (if the option contains an FQDN): If the client
requests an option that conveys an FQDN, it is expected that the
contents of that option will be resolved using DNS. Hence, the
following text may be useful: Clients that request option foo SHOULD
also request option OPTION_DNS_SERVERS as specified in [<a href="./rfc3646" title=""DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3646</a>].
Clients MUST discard option foo if it is invalid (i.e., it did not
pass the validation steps defined in Section X.Y).
Optional text (if option foo in expected to be exchanged between
relays and servers): Option foo is exchanged between relays and
servers only. Clients are not aware of the usage of option foo.
Clients MUST ignore received option foo.
<span class="h3"><a class="selflink" id="section-21.2" href="#section-21.2">21.2</a>. DHCPv6 Server Behavior Text</span>
Sections <a href="#section-17.2.2">17.2.2</a> and <a href="#section-18.2">18.2</a> of [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] govern server operation in
regards to option assignment. As a convenience to the reader, we
mention here that the server will send option foo only if configured
with specific values for foo and if the client requested it.
Optional text: Option foo is a singleton. Servers MUST NOT send more
than one instance of the foo option.
<span class="grey">Hankins, et al. Best Current Practice [Page 28]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-29" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
Optional text (if the server is never supposed to receive option
foo): Servers MUST ignore the incoming foo option.
<span class="h3"><a class="selflink" id="section-21.3" href="#section-21.3">21.3</a>. DHCPv6 Relay Agent Behavior Text</span>
It's never appropriate for a relay agent to add options to a message
heading toward the client, and relay agents don't actually construct
Relay-reply messages anyway.
Optional text (if the foo option is exchanged between the clients and
server or between requestors and servers): there are no additional
requirements for relays.
Optional text (if relays are expected to insert or consume option
foo): Relay agents MAY include option foo in a Relay-forward message
when forwarding packets from clients to the servers.
<span class="h2"><a class="selflink" id="section-22" href="#section-22">22</a>. Should the New Document Update Existing RFCs?</span>
Authors often ask themselves whether their proposal updates existing
RFCs, especially <a href="./rfc3315">RFC 3315</a>. In April 2013, there were about 80
options defined. Had all documents that defined them also updated
<a href="./rfc3315">RFC 3315</a>, comprehension of such a document set would be extremely
difficult. It should be noted that "extends" and "updates" are two
very different verbs. If a new document defines a new option that
clients request and servers provide, it merely extends current
standards, so "updates <a href="./rfc3315">RFC 3315</a>" is not required in the new document
header. On the other hand, if a new document replaces or modifies
existing behavior and includes clarifications or other corrections,
it should be noted that it updates the other document. For example,
[<a href="./rfc6644" title=""Rebind Capability in DHCPv6 Reconfigure Messages"">RFC6644</a>] clearly updates [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] as it replaces existing text with
new text.
If in doubt, authors should try to determine whether an implementor
reading the base RFC alone (without reading the new document) would
be able to properly implement the software. If the base RFC is
sufficient, then the new document probably does not update the base
RFC. On the other hand, if reading your new document is necessary to
properly implement the base RFC, then the new document most likely
updates the base RFC.
<span class="h2"><a class="selflink" id="section-23" href="#section-23">23</a>. Security Considerations</span>
DHCPv6 does have an authentication mechanism [<a href="./rfc3315" title=""Dynamic Host Configuration Protocol for IPv6 (DHCPv6)"">RFC3315</a>] that makes it
possible for DHCPv6 software to discriminate between authentic
endpoints and man-in-the-middle. Other authentication mechanisms may
optionally be deployed. Sadly, as of 2014, the authentication in
DHCPv6 is rarely used, and support for it is not common in existing
<span class="grey">Hankins, et al. Best Current Practice [Page 29]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-30" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
implementations. Some specific deployment types make it mandatory
(or parts thereof, e.g., DOCSIS3.0-compatible cable modems require
reconfigure-key support), so in certain cases, specific
authentication aspects can be relied upon. That is not true in the
generic case, though.
So, while creating a new option, it is prudent to assume that the
DHCPv6 packet contents are always transmitted in the clear, and
actual production use of the software will probably be vulnerable at
least to man-in-the-middle attacks from within the network, even
where the network itself is protected from external attacks by
firewalls. In particular, some DHCPv6 message exchanges are
transmitted to multicast addresses that are likely broadcast anyway.
If an option is of a specific fixed length, it is useful to remind
the implementor of the option data's full length. This is easily
done by declaring the specific value of the 'length' tag of the
option. This helps to gently remind implementors to validate the
option length before digesting them into likewise fixed-length
regions of memory or stack.
If an option may be of variable size (such as having indeterminate
length fields, such as domain names or text strings), it is advisable
to explicitly remind the implementor to be aware of the potential for
long options. Either define a reasonable upper limit (and suggest
validating it) or explicitly remind the implementor that an option
may be exceptionally long (to be prepared to handle errors rather
than truncate values).
For some option contents, out-of-bound values may be used to breach
security. An IP address field might be made to carry a loopback
address or local multicast address, and depending on the protocol,
this may lead to undesirable results. A domain name field may be
filled with contrived contents that exceed the limitations placed
upon domain name formatting; as this value is possibly delivered to
"internal configuration" records of the system, it may be implicitly
trusted without being validated.
Authors of documents defining new DHCP options are, therefore,
strongly advised to explicitly define validation measures that
recipients of such options are required to do before processing such
options. However, validation measures already defined by <a href="./rfc3315">RFC 3315</a> or
other specifications referenced by the new option document are
redundant and can introduce errors, so authors are equally strongly
advised to refer to the base specification for any such validation
language rather than copying it into the new specification.
See also <a href="#section-24">Section 24</a>.
<span class="grey">Hankins, et al. Best Current Practice [Page 30]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-31" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h2"><a class="selflink" id="section-24" href="#section-24">24</a>. Privacy Considerations</span>
As discussed in <a href="#section-23">Section 23</a>, the DHCPv6 packets are typically
transmitted in the clear, so they are susceptible to eavesdropping.
This should be considered when defining options that may convey
personally identifying information (PII) or any other type of
sensitive data.
If the transmission of sensitive or confidential content is required,
it is still possible to secure communication between relay agents and
servers. Relay agents and servers communicating with relay agents
must support the use of IPsec Encapsulating Security Payload (ESP)
with encryption in transport mode, according to <a href="./rfc4303#section-3.1.1">Section 3.1.1 of
[RFC4303]</a> and <a href="./rfc3315#section-21.1">Section 21.1 of [RFC3315]</a>. Sadly, this requirement is
almost universally ignored in real deployments. Even if the
communication path between the relay agents and server is secured,
the path between the clients and relay agents or server is not.
Unless underlying transmission technology provides a secure
transmission channel, the DHCPv6 options SHOULD NOT include PII or
other sensitive information. If there are special circumstances that
warrant sending such information over unsecured DHCPv6, the dangers
MUST be clearly discussed in the security considerations.
<span class="h2"><a class="selflink" id="section-25" href="#section-25">25</a>. Acknowledgements</span>
The authors would like to thank Simon Perreault, Bernie Volz, Ted
Lemon, Bud Millwood, Ralph Droms, Barry Leiba, Benoit Claise, Brian
Haberman, Richard Barnes, Stephen Farrell, and Stewart Bryant for
their comments.
<span class="h2"><a class="selflink" id="section-26" href="#section-26">26</a>. References</span>
<span class="h3"><a class="selflink" id="section-26.1" href="#section-26.1">26.1</a>. Normative References</span>
[<a id="ref-RFC2119">RFC2119</a>] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>, March 1997.
[<a id="ref-RFC3315">RFC3315</a>] Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C.,
and M. Carney, "Dynamic Host Configuration Protocol for
IPv6 (DHCPv6)", <a href="./rfc3315">RFC 3315</a>, July 2003.
<span class="grey">Hankins, et al. Best Current Practice [Page 31]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-32" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
<span class="h3"><a class="selflink" id="section-26.2" href="#section-26.2">26.2</a>. Informative References</span>
[<a id="ref-IANA">IANA</a>] IANA, "Dynamic Host Configuration Protocol for IPv6
(DHCPv6)",
<<a href="http://www.iana.org/assignments/dhcpv6-parameters/">http://www.iana.org/assignments/dhcpv6-parameters/</a>>.
[<a id="ref-IPv4-CONFIG">IPv4-CONFIG</a>]
Rajtar, B. and I. Farrer, "Provisioning IPv4 Configuration
Over IPv6 Only Networks", Work in Progress, February 2014.
[<a id="ref-MAP">MAP</a>] Mrugalski, T., Troan, O., Farrer, I., Perreault, S., Dec,
W., Bao, C., Yeh, L., and X. Deng, "DHCPv6 Options for
configuration of Softwire Address and Port Mapped
Clients", Work in Progress, March 2014.
[<a id="ref-RFC2460">RFC2460</a>] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", <a href="./rfc2460">RFC 2460</a>, December 1998.
[<a id="ref-RFC3046">RFC3046</a>] Patrick, M., "DHCP Relay Agent Information Option", <a href="./rfc3046">RFC</a>
<a href="./rfc3046">3046</a>, January 2001.
[<a id="ref-RFC3319">RFC3319</a>] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration
Protocol (DHCPv6) Options for Session Initiation Protocol
(SIP) Servers", <a href="./rfc3319">RFC 3319</a>, July 2003.
[<a id="ref-RFC3629">RFC3629</a>] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, <a href="./rfc3629">RFC 3629</a>, November 2003.
[<a id="ref-RFC3633">RFC3633</a>] Troan, O. and R. Droms, "IPv6 Prefix Options for Dynamic
Host Configuration Protocol (DHCP) version 6", <a href="./rfc3633">RFC 3633</a>,
December 2003.
[<a id="ref-RFC3646">RFC3646</a>] Droms, R., "DNS Configuration options for Dynamic Host
Configuration Protocol for IPv6 (DHCPv6)", <a href="./rfc3646">RFC 3646</a>,
December 2003.
[<a id="ref-RFC3898">RFC3898</a>] Kalusivalingam, V., "Network Information Service (NIS)
Configuration Options for Dynamic Host Configuration
Protocol for IPv6 (DHCPv6)", <a href="./rfc3898">RFC 3898</a>, October 2004.
[<a id="ref-RFC3986">RFC3986</a>] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, <a href="./rfc3986">RFC</a>
<a href="./rfc3986">3986</a>, January 2005.
[<a id="ref-RFC4075">RFC4075</a>] Kalusivalingam, V., "Simple Network Time Protocol (SNTP)
Configuration Option for DHCPv6", <a href="./rfc4075">RFC 4075</a>, May 2005.
<span class="grey">Hankins, et al. Best Current Practice [Page 32]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-33" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
[<a id="ref-RFC4085">RFC4085</a>] Plonka, D., "Embedding Globally-Routable Internet
Addresses Considered Harmful", <a href="https://www.rfc-editor.org/bcp/bcp105">BCP 105</a>, <a href="./rfc4085">RFC 4085</a>, June
2005.
[<a id="ref-RFC4242">RFC4242</a>] Venaas, S., Chown, T., and B. Volz, "Information Refresh
Time Option for Dynamic Host Configuration Protocol for
IPv6 (DHCPv6)", <a href="./rfc4242">RFC 4242</a>, November 2005.
[<a id="ref-RFC4280">RFC4280</a>] Chowdhury, K., Yegani, P., and L. Madour, "Dynamic Host
Configuration Protocol (DHCP) Options for Broadcast and
Multicast Control Servers", <a href="./rfc4280">RFC 4280</a>, November 2005.
[<a id="ref-RFC4303">RFC4303</a>] Kent, S., "IP Encapsulating Security Payload (ESP)", <a href="./rfc4303">RFC</a>
<a href="./rfc4303">4303</a>, December 2005.
[<a id="ref-RFC4436">RFC4436</a>] Aboba, B., Carlson, J., and S. Cheshire, "Detecting
Network Attachment in IPv4 (DNAv4)", <a href="./rfc4436">RFC 4436</a>, March 2006.
[<a id="ref-RFC4704">RFC4704</a>] Volz, B., "The Dynamic Host Configuration Protocol for
IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN)
Option", <a href="./rfc4704">RFC 4704</a>, October 2006.
[<a id="ref-RFC4833">RFC4833</a>] Lear, E. and P. Eggert, "Timezone Options for DHCP", <a href="./rfc4833">RFC</a>
<a href="./rfc4833">4833</a>, April 2007.
[<a id="ref-RFC4957">RFC4957</a>] Krishnan, S., Montavont, N., Njedjou, E., Veerepalli, S.,
and A. Yegin, "Link-Layer Event Notifications for
Detecting Network Attachments", <a href="./rfc4957">RFC 4957</a>, August 2007.
[<a id="ref-RFC5007">RFC5007</a>] Brzozowski, J., Kinnear, K., Volz, B., and S. Zeng,
"DHCPv6 Leasequery", <a href="./rfc5007">RFC 5007</a>, September 2007.
[<a id="ref-RFC5198">RFC5198</a>] Klensin, J. and M. Padlipsky, "Unicode Format for Network
Interchange", <a href="./rfc5198">RFC 5198</a>, March 2008.
[<a id="ref-RFC5223">RFC5223</a>] Schulzrinne, H., Polk, J., and H. Tschofenig, "Discovering
Location-to-Service Translation (LoST) Servers Using the
Dynamic Host Configuration Protocol (DHCP)", <a href="./rfc5223">RFC 5223</a>,
August 2008.
[<a id="ref-RFC5460">RFC5460</a>] Stapp, M., "DHCPv6 Bulk Leasequery", <a href="./rfc5460">RFC 5460</a>, February
2009.
[<a id="ref-RFC5908">RFC5908</a>] Gayraud, R. and B. Lourdelet, "Network Time Protocol (NTP)
Server Option for DHCPv6", <a href="./rfc5908">RFC 5908</a>, June 2010.
[<a id="ref-RFC5970">RFC5970</a>] Huth, T., Freimann, J., Zimmer, V., and D. Thaler, "DHCPv6
Options for Network Boot", <a href="./rfc5970">RFC 5970</a>, September 2010.
<span class="grey">Hankins, et al. Best Current Practice [Page 33]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-34" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
[<a id="ref-RFC5986">RFC5986</a>] Thomson, M. and J. Winterbottom, "Discovering the Local
Location Information Server (LIS)", <a href="./rfc5986">RFC 5986</a>, September
2010.
[<a id="ref-RFC6059">RFC6059</a>] Krishnan, S. and G. Daley, "Simple Procedures for
Detecting Network Attachment in IPv6", <a href="./rfc6059">RFC 6059</a>, November
2010.
[<a id="ref-RFC6334">RFC6334</a>] Hankins, D. and T. Mrugalski, "Dynamic Host Configuration
Protocol for IPv6 (DHCPv6) Option for Dual-Stack Lite",
<a href="./rfc6334">RFC 6334</a>, August 2011.
[<a id="ref-RFC6422">RFC6422</a>] Lemon, T. and Q. Wu, "Relay-Supplied DHCP Options", <a href="./rfc6422">RFC</a>
<a href="./rfc6422">6422</a>, December 2011.
[<a id="ref-RFC6440">RFC6440</a>] Zorn, G., Wu, Q., and Y. Wang, "The EAP Re-authentication
Protocol (ERP) Local Domain Name DHCPv6 Option", <a href="./rfc6440">RFC 6440</a>,
December 2011.
[<a id="ref-RFC6603">RFC6603</a>] Korhonen, J., Savolainen, T., Krishnan, S., and O. Troan,
"Prefix Exclude Option for DHCPv6-based Prefix
Delegation", <a href="./rfc6603">RFC 6603</a>, May 2012.
[<a id="ref-RFC6610">RFC6610</a>] Jang, H., Yegin, A., Chowdhury, K., Choi, J., and T.
Lemon, "DHCP Options for Home Information Discovery in
Mobile IPv6 (MIPv6)", <a href="./rfc6610">RFC 6610</a>, May 2012.
[<a id="ref-RFC6644">RFC6644</a>] Evans, D., Droms, R., and S. Jiang, "Rebind Capability in
DHCPv6 Reconfigure Messages", <a href="./rfc6644">RFC 6644</a>, July 2012.
[<a id="ref-SOLUTION-4rd">SOLUTION-4rd</a>]
Despres, R., Jiang, S., Penno, R., Lee, Y., Chen, G., and
M. Chen, "IPv4 Residual Deployment via IPv6 - a Stateless
Solution (4rd)", Work in Progress, October 2013.
<span class="grey">Hankins, et al. Best Current Practice [Page 34]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-35" ></span>
<span class="grey"><a href="./rfc7227">RFC 7227</a> DHCPv6 Option Guidelines May 2014</span>
Authors' Addresses
David W. Hankins
Google, Inc.
1600 Amphitheatre Parkway
Mountain View, CA 94043
USA
EMail: dhankins@google.com
Tomek Mrugalski
Internet Systems Consortium, Inc.
950 Charter Street
Redwood City, CA 94063
USA
Phone: +1-650-423-1345
EMail: tomasz.mrugalski@gmail.com
Marcin Siodelski
Internet Systems Consortium, Inc.
950 Charter Street
Redwood City, CA 94063
USA
Phone: +1-650-423-1431
EMail: msiodelski@gmail.com
Sheng Jiang
Huawei Technologies Co., Ltd.
Q14, Huawei Campus, No. 156 Beiqing Road
Hai-Dian District, Beijing, 100095
P.R. China
EMail: jiangsheng@huawei.com
Suresh Krishnan
Ericsson
8400 Blvd Decarie
Town of Mount Royal, Quebec
Canada
EMail: suresh.krishnan@ericsson.com
Hankins, et al. Best Current Practice [Page 35]
</pre>
|