RFC 3285

Using Microsoft Word to create Internet Drafts and RFCs

πŸ“… published May 2002, from ietf

RFC 3285: Using Microsoft Word to create Internet Drafts and RFCs πŸŽ€

Part 1 of 4 πŸ’…

Bestie, this one is a whole vibe. It's RFC 3285, written by M. Gahrns (Microsoft) and T. Hain (Cisco) and dated May 2002 🌸. It's Informational, so it isn't a standard, just helpful info. The title block doesn't list anything it obsoletes or updates πŸ™ˆ.

  • Series: Network Working Group ✨
  • Number: RFC 3285
  • Title: Using Microsoft Word to create Internet Drafts and RFCs πŸ’–
  • Authors: M. Gahrns (Microsoft) and T. Hain (Cisco) 🧚
  • Category: Informational πŸ¦‹
  • Date: May 2002 πŸ“
  • Obsoletes / Updates: nothing listed 🫢

Status of This Memo ✨

This memo gives info to the Internet community πŸ’œ. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited 🌈.

Copyright (C) The Internet Society (2002). All Rights Reserved.

Abstract 🌸

Okay so the whole point is this: it explains how to set up Microsoft Word so it spits out documents in Internet Draft and RFC format πŸ’….

Table of Contents πŸ“‹

   1. Overview.......................................................2
   2. Conventions used in this document..............................2
   3. Instructions for producing Internet drafts and RFCs............3
      3.1 Defining Microsoft Word Page Layout and Styles.............4
      3.2 Positioning the document identifiers on the first page.....7
      3.3 Automatic date.............................................8
      3.4 Automatic reference numbering..............................9
   4. Final fixup: the CRLF program.................................11
   5. Known problems................................................16
      5.1 Margins...................................................16
      5.2 Printing..................................................16
      5.3 The Underscore character..................................17
   6. Formal Syntax.................................................17
   7. Security Considerations.......................................17
   References.......................................................17
   Acknowledgements.................................................17
   Authors' Addresses...............................................18
   Full Copyright Statement.........................................19

1. Overview πŸ¦‹

So this doc walks you through making a Microsoft Word 97 (or newer) template that helps you write Internet drafts πŸ’–. You get simple WYSIWYG editing, and the output still follows the IETF draft and RFC submission rules πŸ’…. That means 72 characters per line πŸ“, 58 lines per page πŸ“„, every line ends with a CRLF 🫢, and every page is followed by an LF ✨. Word's justification and table tools can also help you make ASCII stick drawings 🧚.

The authors were working at Microsoft for a lot of this doc's evolution, but it is not a Microsoft product and it isn't supported πŸ™ˆ.

The doc also details exactly how the RFC Text and RFC Heading styles are built πŸ’œ. If you want to customise it or build a similar template for other Word versions, this is your guide 🌈.

It includes the description and source code for CRLF.EXE, the program that makes the final text file πŸŽ€. People gave feedback that every version of Windows has a slightly different Generic Printer driver πŸ’€. The doc won't stay up to date with every Windows release, so treat the code sample as a starting point for your own tweaks πŸ”₯.

You can grab the Word template and CRLF.EXE from these spots πŸ“:

ftp://ftp.ietf.org/internet-drafts/2-Word.template.rtf
ftp://ftp.ietf.org/internet-drafts/crlf.exe
ftp://ftp.rfc-editor.org/in-notes/rfc-editor/2-Word.template.rtf
ftp://ftp.rfc-editor.org/in-notes/rfc-editor/crlf.exe

Also, the steps work in Word for Windows or the Apple Macintosh edition, but only the Windows edition can make the plain text file you actually submit to the I-D or RFC editors πŸ’…. That's because there's no Generic Printer driver for the Mac 😭.

2. Conventions used in this document 🌸

Quick heads up on how menus are shown: when you walk down a pull-down menu tree, each step gets indented on its own line πŸ’–. That saves you from a wall of "then click" and "select" πŸ’…. For example 🧚:

      Help
         About Microsoft Word

3. Instructions for producing Internet drafts and RFCs ✨

  1. Microsoft Word's auto-formatting can totally mess things up when you're making IETF format 😭. It inserts special characters for quotes and adds fancy formatting to lists, and those show up as gibberish in plain-text readers πŸ’€. To avoid that, turn auto formatting off πŸ™ˆ.
   Tools
      Autocorrect

On the property pages, turn off all the auto formatting options under 'AutoFormat' and 'AutoFormat As You Type' πŸ’…. If you forget, or you keep flipping between IETF format and not, you can type a ^Z after each auto-format event to undo the change πŸ”₯. The catch is you have to notice it happened πŸ₯Ί.

  1. You need two special styles: RFC Heading and RFC Text πŸ’–. If you use automatic reference numbering or a table of contents (more on that below), you'll also have to change the styles for Endnote Reference, Endnote Text, and TOC 🌈. The whole draft has to be written with these styles, or the spacing comes out wrong 😭.

This RFC itself was made with the styles and steps described here πŸŽ€. You can either build the RFC Heading and RFC Text styles yourself, or grab a copy of the MS Word (.rtf) file from one of the places above, delete the body text, put in your own text, and apply the styles to the body and headers as needed 🫢.

* Do not use bold, underlining, italics, etc., or you will lose the WYSIWYG editing feature since these settings affect the number of characters that can occur on a line. When the resulting Internet draft is saved as plain text, all that formatting will be lost anyway. *

Honestly, that's the big no-no πŸ’€: formatting changes how many characters fit on a line, so don't do it πŸ™ˆ.

  1. Print the document to the Generic Text Printer and save the output to a file πŸ¦‹. If you don't have that driver, install it from the Control Panel πŸ’…. Here's the path 🧚:
   Printers
      Add Printer
         local/My Computer
            any LPT port (you will be printing to a file)
               select Generic, Generic/Text Only from the combo box

When you print to a file, a pop-up asks for the file name 🌸.

  1. Run the CRLF program in a DOS window so it adds the carriage returns for you ✨. The usage is πŸ“:
CRLF <source> <destination>

Here <source> is the file you made by printing to the generic text printer, and <destination> is the name of the text draft you're making πŸ’–. For example, if CRLF.EXE and draft-00.prn are in the C:/TEMP directory, you'd do this 🧚:

cd c:/temp
crlf draft-00.prn draft-00.txt
  1. Double-check that no non-ASCII characters snuck in by opening the doc in a simple text viewer πŸ‘€. The Unix program 'less'[1] will highlight any non-ASCII characters πŸ’…. If you don't have a non-Microsoft operating system around, Notepad will show the file and does not try to reinterpret any special characters 🫢.

3.1 Defining Microsoft Word Page Layout and Styles πŸŽ€

These settings are what create the RFC Text and RFC Heading styles πŸ’œ. Heads up: the menu options are in parentheses and they're listed for Microsoft Word 97 πŸ’…. Other versions might be a little different πŸ™ˆ.

  1. Set measurement units to points πŸ“.
   Tools
      Options
         General
            Measurement units = points
  1. Set the margins like this (File, Page Setup, Margins) 🌸:
Top:         24 pts
Bottom:      0 pts
Left:        0 pts
Right:       93.6 pts
Gutter:      0 pts
Header:      0 pts
Footer:      0 pts

The right margin is what sets the 72 characters per line πŸ’–. At 12 pt font with 10 chars/inch, 72 chars = 7.2" 🧚. The paper is 8.5" wide πŸ“„. So 8.5" - 7.2" = 1.3" = 93.6 pts ✨. If you get the "one or more margins are outside the printable area" message, pick Ignore πŸ™ˆ. That seems to depend on which printer you've selected 🫢.

  1. Set the paper size like this πŸ“:
File
   Page Setup
      Paper Size
         Width:  612 pt (8.5")
         Height: 660 pt (12pt * 55 lines per page)

The paper height is what sets 55 lines per page 🌈.

  1. Make headers and footers different for the first page πŸŽ€:
File
   Page Setup
      Layout
  1. Define an RFC Heading style πŸ’…:
Format
   Style
      New

RFC Heading: Heading1 + Font: Courier New, 12pt, Not Bold, Line spacing exactly 12pt., Space before 0 pt after 0 pt, Level 1

NOTE: Line Spacing Exactly 12pt is very important. Set this through Format: Paragraph 😭

You can add more heading levels by repeating this step and bumping the Level # πŸ’–. If you want numbered headings, do this 🧚:

Format
   Bullets and Numbering
      Outline Numbered
         Select preferred style
         Customize
            More
               Link level to style RFC Heading
  1. Define an RFC Text style πŸ¦‹:
Format
   Style
      New

RFC Text: Normal+Font: Courier New, 12pt, Indent: Left 21.6pt, Line Spacing Exactly 12 pt.

You set the line spacing and indent through Format, Paragraph 🌸. That leaves a 3 character left indent for the RFC text ✨.

  1. Fix the Header style πŸ’–:
Format
   Style
      Header

Header: Normal+Font: Courier New, 12pt, Line Spacing Exactly 12pt, clear the tabs previously defined, and add Tabs 252 pt Centered, 504 pt Right Flush πŸŽ€.

  1. Fix the Footer style 🫢:
Format
   Style
      Footer

Footer: Normal+Font: Courier New, 12pt, Line Spacing Exactly 12pt, Tabs 252 pt Centered, 504 pt Right Flush 🌈.

  1. Set up your headers and footers for the first page πŸ“:
View
   Headers
      (on first page)
Header: No Header
Footer:  Blank line
         Blank line
AuthorName <tab> <tab> [Page <page number field>]
  1. Set up the headers and footers for every page after the first πŸ’…:
View
   Headers
      (on second page)
Header: <tab> Title <tab> Month, Year
         Blank line
         Blank line
Footer:  Blank line
         Blank line
AuthorName <tab> Expiration <tab> [Page <page number field>]
  1. Set the tabs to every three spaces 🧚:
Format
   Style
      RFC Text
         Tabs: Left 21.6, 43.2, 64.8, 86.4, 108, 129.6,
         151.2,172.8, 194.4, 216, 237.6, 259.2, 280.8,
         302.4, 324, 345.6,367.2, 388.8, 410.4, 432,
         453.6, 475.2, 496.8
  1. Fix the table-of-contents styles, and repeat for each level πŸ’–:
Format
   Style
         TOC1: RFC text +, Automatically update, Clear all tabs,
            Add tab Rt. Flush, 504pt, ... leader
         TOC2: RFC text + Indent: Left 43.2pt,
            Automatically update, Clear all tabs,
            Add tab Rt. Flush, 504pt, ... leader
         TOC3: RFC text + Indent: Left 64.8pt,
            Automatically update, Clear all tabs,
            Add tab Rt. Flush, 504pt, ... leader

3.2 Positioning the document identifiers on the first page ✨

okay so the Table tool is literally your bestie for lining up the document identifiers on page one πŸŽ€ Each cell keeps its own justification, so getting left and right stuff on the same line is so much easier πŸ’… On the Toolbar, click the icon that looks like a grid with a dark bar across the top. A table array pops up, so drag across to pick your rows and columns. For the opening header, go with 4 rows x 2 columns, unless there are several authors. Click-and-hold in the left margin to select the table you just inserted, then clear the borders πŸ¦‹

   Format
      Borders and Shading
         None

Next, select the cells on the right. Position the cursor just above the top cell, and when it turns into an arrow pointing down, click. Then set justification to right. (The default is to take justification from the line it's positioned on, so the left column shouldn't need changing.) 🌸

   Format
      Paragraph
         Right

If you need to, move the center divider to the right so the document title fits. Select the left column of cells, then hover over the dividing line. When the cursor changes to parallel bars with right/left arrows, click-and-hold and drag the line wherever it needs to go 🫢


3.3 Automatic date πŸ—“οΈ

okay for everyone who updates drafts all the time and keeps forgetting to change the current save and expire dates, here's the move 😭 Setting up the expire-month field is pretty complex, but you only have to do it once in a template file, and every future draft benefits 🧚

To automatically set the current date on save, select the lower right cell in the table we made above, then insert the save date:

   Insert
      Field
         Date and Time
            SaveDate
            In the box below the sample "field codes",
               modify as necessary to make it look like:
               - SAVEDATE \@ "MMMM YYYY" - (between the -'s).
            OK

The field has a gray background on screen, but it won't show up in the printed version πŸ™ˆ Double click the field, copy it, then paste over the Month, Year in the header (10 in Layout Styles above) to replace them πŸ’–

Setting up the expire-date is similar, but you need to nest fields. Select the spot for the month, then insert an IF field:

   Insert
      Field
         MailMerge
            IF
            OK

This will throw an error, and that's totally normal πŸ’€ Right click the error message and select Toggle Field Codes. That lets you keep editing. Select the space after the initial IF, then insert another field: SaveDate (same as before, but this time only the month digit "M" is used). Right click the number it inserts and Toggle Field Codes again. Follow the right brace } with =, then the month to test, followed by the month name 6 months later. Then loop and insert another IF, and keep going until all 12 are done. Finish the last one with a "" to complete the syntax. The expanded field code will look like this πŸ”₯

{ IF { SAVEDATE  \@ "M" \* MERGEFORMAT } = 1 July { IF { SAVEDATE  \@
"M" \* MERGEFORMAT } = 2 August { IF { SAVEDATE  \@ "M" \*
MERGEFORMAT } = 3 September { IF { SAVEDATE  \@ "M" \* MERGEFORMAT} =
4 October { IF { SAVEDATE  \@ "M" \* MERGEFORMAT } = 5 November { IF
{ SAVEDATE  \@ "M" \* MERGEFORMAT } = 6 December { IF { SAVEDATE  \@
"M" \* MERGEFORMAT } = 7 January { IF { SAVEDATE  \@ "M" \*
MERGEFORMAT } = 8 February { IF { SAVEDATE  \@ "M" \* MERGEFORMAT } =
9 March { IF { SAVEDATE  \@ "M" \* MERGEFORMAT } = 10 April { IF {
SAVEDATE  \@ "M" \* MERGEFORMAT } = 11 May { IF { SAVEDATE  \@ "M" \*
MERGEFORMAT } = 12 June "" \* MERGEFORMAT } \* MERGEFORMAT } \*
MERGEFORMAT } \* MERGEFORMAT } \* MERGEFORMAT } \* MERGEFORMAT } \*
MERGEFORMAT } \* MERGEFORMAT } \* MERGEFORMAT } \* MERGEFORMAT } \*
MERGEFORMAT } \* MERGEFORMAT }

Next, space over and set the expire-year with a field, kind of the same way. This time there are only 2 IF fields, comparing the two halves of the year. If it's true, the printed value is the SaveDate year value. The expanded result will look like this 🧠

{ IF { SAVEDATE \@ "M" \* MERGEFORMAT } < 7 { SAVEDATE \@ "YYYY" \*
MERGEFORMAT } { IF { SAVEDATE \@ "M" \* MERGEFORMAT } > 6 { = {
SAVEDATE \@ "YYYY" \* MERGEFORMAT } + 1 \*MERGEFORMAT } "" \*
MERGEFORMAT }

To turn the field codes back into normal text, right click and pick Toggle Field Codes, or Update Field. Then select both fields by clicking one and shift clicking the other. Copy them, then paste them into the footer (9 & 10 in Layout Styles above), replacing the Month, Year ✨


3.4 Automatic reference numbering πŸ¦„

so you can get automatic updates for your reference numbers, you'll need to make a few changes πŸ’… Heads up: the document has to be a single section before the Reference heading for this to work πŸ™ˆ

  1. Insert a section break on the line after the Reference heading:
   Insert
      Break
         Section Break
            Continuous
  1. Format the Endnote References and Text styles:
   Format
      Style
         Endnote reference
         Modify
            Based on 'underlying paragraph'
            Format Font
            clear the check box for 'superscript'
         Endnote text
         Modify
            Based on 'RFC text'
            Format Paragraph
            Indentation
               Left    21.6
            Special
               Hanging 21.6
  1. Set up where the references go, plus the number style:
   Insert
      Footnote
         Endnote
         Autonumber
         Options
            Place at 'End of section'
            Numeric style '1,2,3'
  1. Pick the spot for the first reference. Between the [ ] characters you typed, insert an endnote:
   Insert
      Footnote (endnote will already be selected,
          as will auto 1,2,3)
      OK
⚠️ When the endnote goes in, the lower pane pops up. Type in the text describing the reference. The first time you insert a reference, clear the Endnote Separator (the continuation separator might need clearing too). Find the pull down just above the reference text and switch it to each of the options, so that everything except 'All Endnotes' is cleared πŸ₯Ί
   Endnote Separator
      Select and delete any text

The reference number in the text and in the endnote table will update automatically as you make changes 🩷 If you closed the endnote window and need to make changes again, go to:

   View
      Footnotes

To automatically add updated cross-references for earlier footnotes, select where the cross-reference goes. Between the [ ] characters you typed, insert a cross-reference:

   Insert
      Cross-reference
         Select reference type 'endnote'
         Clear the checkbox for 'Insert as hyperlink'
         Select the reference from the endnote list
         Insert

4. Final fixup: the CRLF program ✨

okay so bestie, every line in an RFC has to end with a CRLF πŸŽ€, but when you print your doc to the Generic Text Printer driver, some blank lines only get a line feed. 😭 Picture an old-school text line printer printing one line of text and then 3 blank lines. The output comes out like this:

Line of Text<CR><LF><LF><LF>

Why? Because the printer didn't need to move the carriage head for the blank lines, so it just did line feeds. Iconic efficiency, but it breaks the rules πŸ’€

Here's a sample CRLF fixup program that cleans this up so your doc follows IETF draft and RFC guidelines. πŸ’…

/***************************************************************
 * CRLF.C - Sample source code to format documents produced by
 * the MS Word IETF template so that they comply to IETF draft
 * and RFC guidelines
 * Change CR/FF ; FF/CR/LF ; FF/LF ; CR/FF/CR/LF  into CR/LF/FF
 ***************************************************************/

  #include <stdio.h>
  #include <io.h>
  #include <fcntl.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <memory.h>
  #include <string.h>
  #include <stdlib.h>
  #define CR 13
  #define LF 10
  #define FF 12
  #define TRUE 1
  #define FALSE 0

  typedef int BOOL;

  int main(int argc, char *argv[])
  {
       int fSrc, fDest;
       int iNumBytesRead;
       int iNumLines;
       char cr = CR;
       char lf = LF;
       char ff = FF;
       unsigned char buff[3];
       BOOL bPrecedingCR = FALSE;
       BOOL bPrecedingLF = FALSE;
       BOOL bPrecedingFF = FALSE;

       if(argc != 3)
       {
               printf("Usage:\n\n");
               printf("    crlf <srcfile> <dstfile>\n\n");
               return 0;
       }

  fSrc = open(argv[1], O_RDONLY | O_BINARY);
  fDest = open(argv[2], O_CREAT | O_RDWR | O_BINARY |
     O_TRUNC, S_IREAD | S_IWRITE);

  if(fSrc == -1)
  {
     printf("Could not open file (%s) for reading.\n",
              argv[1]);
           printf( strerror(errno));
               return 0;
       }

       if(fDest == -1)
       {
               printf("Count not open file (%s) for writing.\n",
              argv[2]);
           printf( strerror(errno));
               return 0;
       }
       // Using the MS Word with the generic text printer, an
       // extra CR LF starts the file.  Skip over these first 2
       // bytes,
       iNumBytesRead = _read(fSrc, buff, 2);

     bPrecedingCR = FALSE;
     bPrecedingLF = TRUE;
     bPrecedingFF = FALSE;
     iNumLines = 0;

       // Prepare to parse through the file
       iNumBytesRead = _read(fSrc, buff, 1);
       while(iNumBytesRead > 0)
       {
        if (buff[0] == FF)
        {
           // Found FF
           if (bPrecedingCR == TRUE)
           {
              // Some drivers write CR/FF w/o LF
              // Insert LF between
              _write(fDest, &lf, 1);
              _write(fDest, &(buff[0]), 1);
           }
           else if (bPrecedingLF == TRUE)
           {
              // If driver writes LF/FF, assume preceding CR
           }
           else if (bPrecedingFF == TRUE)
           {
              // If we just set FF from line count, ignore this
              // one
           }
           else if (bPrecedingLF == FALSE && bPrecedingCR == FALSE)
           {
              // Some drivers write FF alone ; insert CR/LF
              // for RFC rule of FF on line by itself
              _write(fDest, &cr, 1);
              _write(fDest, &lf, 1);
              _write(fDest, &(buff[0]), 1);
           }
           // reset flags
           bPrecedingFF = TRUE;
           bPrecedingCR = FALSE;
           bPrecedingLF = FALSE;
           iNumLines = 0;
        }
        else if (buff[0] == CR)
        {
           // Found CR
           if (bPrecedingFF == TRUE)
           {
              // Some drivers write CR/FF/CR/LF
              // ignore second CR/LF as it creates a 59th line
           }
           else
           {
              // This CR counts
              bPrecedingCR = TRUE;
              bPrecedingLF = FALSE;
              bPrecedingFF = FALSE;
              if (++iNumLines < 59)
              {
                 // Not end of page write it out
                 _write(fDest, &(buff[0]), 1);
              }
              else
              {
                 // Some drivers write 66 lines per page as LF
                 // write end of page & skip to next CR in LF test
                 _write(fDest, &cr, 1);
                 _write(fDest, &lf, 1);
                 _write(fDest, &ff, 1);
                 bPrecedingFF = TRUE;
                 bPrecedingCR = FALSE;
                 bPrecedingLF = FALSE;
                 iNumLines = 0;
              }
           }
        }
        else if (buff[0] == LF && bPrecedingFF == TRUE)
        {
           // Ignore up LF to next CR
        }
        else if (buff[0] == LF && bPrecedingCR == TRUE)
        {
           // Found a LF after a preceding CR
           // write it out and reset flags
           bPrecedingLF = TRUE;
           bPrecedingCR = FALSE;
           bPrecedingFF = FALSE;
           _write(fDest, &(buff[0]), 1);
        }
        else if (buff[0] == LF && bPrecedingCR == FALSE)
        {

           // Found a LF without a preceding CR
           if (bPrecedingLF == TRUE)
           {
              // Inject a CR to precede the LF only
              // if still in the first col
              if (++iNumLines < 59)
              {
                 // Not end of page write it out
                 _write(fDest, &cr, 1);
                 _write(fDest, &(buff[0]), 1);
                 bPrecedingLF = TRUE;
              }
              else
              {
                 // Driver writing longer than page
                 // write end of page & skip to next CR
                 _write(fDest, &cr, 1);
                 _write(fDest, &lf, 1);
                 _write(fDest, &ff, 1);
                 iNumLines = 0;
                 bPrecedingFF = TRUE;
                 bPrecedingCR = FALSE;
                 bPrecedingLF = FALSE;
              }
           }
           else
           {
              //ignore the random LF and clear flag
              bPrecedingLF = FALSE;
           }
        }
        else
        {
           // Other text, write it out and clear flags
           bPrecedingCR = FALSE;
           bPrecedingLF = FALSE;
           bPrecedingFF = FALSE;
           _write(fDest, &(buff[0]), 1);
        }
        // Read next byte
        iNumBytesRead = _read(fSrc, &buff[0], 1);
     }
     _close(fSrc);
     _close(fDest);

     return 0;
  }

5. Known problems πŸ™ˆ

5.1. Margins

okay so during development there were reports that some combos of Windows and Word cut off characters on the left. 😭 One fix is to set the left and right margins to 36 and 57.6, which shifts the text right. If clipping wasn't an issue for your combo, those values give you leading spaces. 🫠 That doesn't change how it looks overall, but it makes the file bigger than it needs to be and breaks the RFC line length rule πŸ™…β€β™€οΈ Tweaking margins for your specific Windows and Word combo has to be locally appropriate, so just move both in equal increments of 12 until every character shows up. ✨

5.2. Printing

if you try to print your draft straight from Microsoft Word to a real printer (not a file using the Generic Text printer driver), you might get an error saying the margins are outside the printer's printable area. πŸ’€ If you keep going anyway, the first 2 characters of each heading get chopped off. The recommended move is to make a printed copy by running the CRLF program to produce a text file, then sending that to the printer. That way you don't have NOTEPAD and friends adding their own margins πŸ™„ Example:

-  Print to a file using the generic text printer
-  CRLF draft.prn draft.txt
-  NET USE lpt1 <\\printername\sharename>
-  TYPE draft.txt > LPT1

Another option: if you open the final draft.txt in Word, setting all 4 margins to .65" will position it on the page. πŸ’…

File
   Page Setup
   Top    .65
   Bottom .65
   Left   .65
   Right  .65

5.3. The Underscore character

if you use the underscore character "_" within the RFC Text and RFC Heading style, it won't show up on most screens. πŸ‘€ (It looks like a blank space.) It prints correctly though, and it'll show as an underscore in the final draft output. πŸ¦‹

6. Formal Syntax πŸŽ€

The formal definition of RFC format lives in RFC 2223 [2], and Internet Draft instructions are available at [3]. πŸ“š

7. Security Considerations 🚨

Caution is advised when opening any document that may contain a macro virus. ⚠️ The template files originally provided to the Internet-drafts & RFC editors did not contain any macros, and unless someone tampered with them, they should still not. 🫢 If you're worried about the template doc file, the instructions here let you build one from scratch. πŸ› οΈ More about Microsoft Word macro virus concerns is at http://www.microsoft.com/. To find the current documents, search for 'macro virus'. πŸ”

References πŸ“š

[1] http://www.greenwoodsoftware.com/less/

[2] Postel, J. and J. Reynolds, "Instructions to RFC Authors", RFC 2223, October 1997.

[3] http://www.ietf.org/ietf/1id-guidelines.txt

Acknowledgements 🌸

The authors would like to acknowledge the comments from around the community that helped refine this document. 🫢 Particular recognition goes to DJ Son and Aaron Falk, of the RFC Editor staff, for aligning the details of this document with the current RFC Editor process. πŸ‘‘

Authors' Addresses πŸ’œ

Mike Gahrns Microsoft One Microsoft Way Redmond, Wa. USA

Phone: 1-425-936-9833 EMail: mikega@microsoft.com


Tony Hain Cisco 500 108th Ave Bellevue, Wa. USA

Phone: 1-425-468-1061 EMail: ahain@cisco.com

Copyright (C) The Internet Society (2002). All Rights Reserved. 🌈

Okay so here's the legal bit, bestie πŸ’…. You can copy this document and hand it to anyone, and you can make derivative works that comment on it, explain it, or help people implement it. You can publish and distribute those, in whole or in part, with no restriction of any kind. The one condition is that the copyright notice and this paragraph have to be on every copy and derivative work πŸŽ€.

The original document itself is a different story. It can't be modified in any way, like removing the copyright notice or the references to the Internet Society or other Internet organizations. There are two exceptions. The first is developing Internet standards, where you have to follow the copyright procedures in the Internet Standards process. The second is translating it into languages other than English 🌸.

The permissions above are perpetual. The Internet Society, its successors, and its assigns will never revoke them 🫢.

The document and everything in it is provided "AS IS" and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. πŸ’€

Acknowledgement πŸ¦‹

Funding for the RFC Editor function is currently provided by the Internet Society. Shoutout to them for keeping the RFC Editor running πŸ’œπŸ‘‘

πŸ“¦ where this page comes from