Router Plinth

The Requirement

Recently I replaced the combined WiFi-router-modem in my home-network with separate network-devices; WiFi access-point, router, modem. Though it's irrelevant in the context of this project, my reasons were:

  • It allows my modem to be connected to the house's master telecoms socket, without co-locating;
    • the router & thus retaining the option to use secure & fast wired Ethernet connections from the router to clients on the LAN.
    • the WiFi access-point, the ideal location for which is dictated by other criteria.
  • It permits individual network-devices to be replaced;
    • to adopt new technology (e.g. FTTP or WiFi-6).
    • because the vendor stopped supporting your model (e.g. with security-updates).
    • because it broke (e.g. after a ligntning-strike).
  • It partitions the labyrinthine configuration of an aggregated WiFi-router-modem.
  • In principle, it improves performance, since the CPU & RAM of the combined network-device are typically barely adequate, & the three separate network-devices can now operate concurrently. The modem is bridging the telecoms network with the Ethernet; while the router is concurrently implementing the firewall-rules, NATing, & implementing a VLAN; & the WiFi access-point is concurrently broadcasting & receiving.
  • It permits the modem to be quickly bounced without also bouncing other network-devices.
  • It's difficult to access the modem's administration-interface to debug problems.
  • There are more Ethernet-cables.
  • Initially, it's more expensive.

Regrettably, the unintended consequence was that the router now interfaces with the WAN via a thick (& therefore stiff) CAT-7 Ethernet-cable from the remote modem, rather than a relatively thin flexible telecoms wire, & whenever this stiff cable is moved, the RJ45 disconnects … & worse, the only visual indication of this problem is that the light on the Ethernet-port doesn't flash to indicate traffic.
N.B. my router caters for optional wall-mounting, so that Ethernet-cables emerge vertically downwards, but this doesn't resolve the issue.

The Solution

The solution I envisage is a cable-comb to support the Ethernet-cables, & to pinch them enough to isolate them from any vibration resulting from someone deciding to Hoover around them. The cable-comb will be secured to a plinth to which the router is also secured using the holes provided for wall-mounting. The cable-comb & plinth are separate components, to allow for relative adjustment & individual replacement. The following discussion may be rather dry for normal people, so before proceeding I've depicted the implementation of this solution. Clearly this design is dedicated to one specific router, but the concept may translate to yours.


FreeCAD-logo FreeCAD

FreeCAD-0.18 was used to design both parts. This isn't a FreeCAD-tutorial (there are many people way more qualified than me in this domain), but one can waste a lot of time before learning the idiosyncrasies of this otherwise laudable application … so I feel the need to be frank about the experience. This is a powerful application, but that power comes with complexity, & consequently it takes time to grok. The tools it provides to define 3D parts are categorised into many independently designed virtual workbenches.

This design-philosophy results in some inconsistency in the various interfaces, & a specific task can often be performed on several different workbenches (e.g. there are two ways to chamfer/fillet an edge & at least three ways to replicate a part). This may seem inelegant, but presumably it allows the software to progress quickly, & the duplicate tools give the user options when the stability of one tool is more noodle than rock. Whilst recovery-files are periodically saved, manually saving the design before trying anything ambitious becomes a nervous habit. The learning-process can be reduced by constraining one's exploration to a subset of workbenches which are sufficient to design nearly anything; this project uses all these workbenches.

I hope this summary doesn't sound ungratefully critical, because this application is free opensource, & I think it's amazing.


Whilst in subsequent sketches & parts, one could merely hard-code the many numeric parameters, this obscures the underlying calculation & results in either repetition or in references to the dimensions defined in previous sketches. These parameters can alternatively be centralised & annotated using the "Spreadsheet" workbench. I created a separate spreadsheet for each part & another for the standardised dimensions of engineering components. This technique can be used to reduce references between sketches & the resulting vulnerability of the model to the automatic renaming of nodes, edges & faces.

Start with this workbench & record accurate measurements of everything. Not only will this ultimately be required, but by starting with the correct values, subsequent changes to the model won't be required & many broken models avoided.


On one level, this is like a 2D drawing-package (e.g. Gimp), but when drawing shapes using such an application, the precision of the result is heavily dependent on one's dexterity with a mouse; this is inadequate. This workbench is necessarily more precise, allowing mathematical constraints to be applied to the lines & arcs from which the sketch is composed, sequentially removing all its degrees of freedom. These constraints allow one to precisely define the lengths, angles, & positions of the parts of sketch. Some of these constraints require numerical parameters which can subsequently be altered to adjust a feature of the part.


A complex sketch requires many constraints (the sketch of just the router-plinth's perimeter required 73 of which 11 required parameters), & while it's tempting to merely find a part of the sketch which can be moved by one's mouse & nail it to a pair of absolute coordinates; that would result in many duplicated constraint-parameters which frustrate modification; those parameters wouldn't necessarily define quantities which are meaningful; & the constraints wouldn't automatically adjust to the movement of features with which they must coordinate. If one approaches the task of fully constraining a sketch without any sense of what you're trying to achieve, it's easy to get lost; rather, ask yourself what defines this sketch's essence, what is fundamental to its identity, even when distorted by the shifting parts with which it coordinates; don't be tempted to define a constraint merely to reduce the degrees-of-freedom. In my opinion, the constraint-set is improved by minimising parameterised constraints, particularly those specifying absolute coordinates.

E.g. If a part is attached via two circular bolt-holes, the radius & absolute coordinates of both can be specified as six numerical constraints, but it may be more appropriate to specify the three numerical constraints applicable to just one circle, then define the other as having equal radius & define its location by symmetry. One could go further & decide that the two Cartesian coordinates required to locate one circle, are more correctly defined not in absolute terms, but relative to a point on the flat face on which it's drawn. CAVEAT: whilst such constraints may be philosophically superior, it leaves the sketch open to failure when the referenced point in the external sketch doesn't merely move but is either removed or renamed, & this is a depressingly common experience.

Part Design

This workbench allows one to take the 2D image from the "Sketcher" workbench & generate the third dimension by; extruding it into a prism, using it as a template for drilling a hole, or rotating it to form a solid of revolution. This process of sketching & projecting can be sequentially applied to various flat faces of the emerging 3D object to define a complex part as a sequence of operations. One can include other operations like mirroring, replication, & filleting into this stack of operations, & with these operations perform nearly everything required to design most parts.
CAVEAT: deep stacks of operations become increasingly vulnerable to change, since a tweak to a parameter constraining the location or the dimensions of a feature, may introduce a new edge in the topology of the part, triggering the renaming of all subsequent edges, & breaking references to them (this is a consequence of the Topological Naming-problem).

These references to external geometries occur in two scenarios, when referencing one sketch in the constraints of another, & when filleting/chamfering an edge. The former can only be avoided by adopting the alternative evil of merely copying the numerical constraints from the external geometry (frustrating subsequent modification), & the latter can be relegated to the end of the stack of operations, when hopefully, the design is nearly complete. The process of composing deep stacks of operations, becomes tolerably robust if the constraint-parameters applied at each level are known to be correct, allowing each new operation to operate on a solid foundation. If one is tempted to guess the constraint-parameters required to define a sketch, in the hope of returning to modify them later, the chances are that many subsequent operations will become so profoundly broken that it's quicker to delete them than to repair them.


There is another reason why filleting is best left until the last moment, which results from the necessarily limited floating-point precision of the arithmetic used to define the points on a curve. Whilst one can accurately perform the common arithmetic operations using fractional arithmetic, trigonometric operations or square-roots typically use floating-point arithmetic because the result is rarely rational, & therefore can't be expressed precisely as a fraction. Regardless of the precision of that floating-point arithmetic, there's likely to be an error which manifests in either a gap or an overlap between the two supposedly adjacent curves. When a hole, however small, is introduced in the surface of a solid part, the inside & the outside of the part become connected; such a part can't be 3D-printed (because its volume is zero). This problem applies to the general case of joining two curves along their length, of which the meeting between curved fillets is a common instance. Another scenario in which this problem manifests is when attempting to sketch a shape on a flat face bounded by a curve, with which an arc of the sketch must coincide. So, for example, if one wanted to design a mug, then one could extrude a thin cylindrical base then attempt to extrude a hollow thin-walled cylinder up from one circular face of this base, but it would be more robust to extrude a thick cylinder then drill down from one circular face to construct the inside, since in this latter scenario the curved surface of the mug has no junctions.


This workbench allows one to combine parts (perhaps from the "Part Design" workbench) using set-operations (e.g. unions & differences). The "Part Design" workbench is limited to sketches on flat faces, but these set-operations allow shapes to meet along curved surfaces.

This workbench also provides a vital check on the integrity of the geometry, which should be confirmed before proceeding to apply more complexity to it. It is this which permits the microscopic holes resulting from floating-point errors to be discovered.

This workbench also allows one to refine a shape by removing the boundary-lines between merged parts. These redundant boundaries might otherwise unnecessarily fracture a mesh generated from the shape.


This workbench allows amongst other things; the construction of drafting lines, along which a sketch may be swept to construct a tortuous wire (using the "Part" workbench); & the construction of arrays of parts.


This workbench facilitates finite-element analysis of a part using external applications to perform the specialised mesh-generation & to solve the finite-element matrix-equations. This isn't part of the core process of defining parts, but can reveal short-comings in the design, or the requirement for a stronger material.


This workbench allows one to construct a mesh from a part, which can then be exported in STL-format, for uploading to a 3D-printing service.


Because of the fragility of deep stacks of operations within the "Part Design" workbench, it is necessary to have a clear idea of the critical dimensions that the router-plinth & cable-comb must satisfy. Lacking the manufacturer's engineering-drawing of my router, I used a micrometer to measure:

the location & size of the bolt-holes provided for wall-mounting,
which must match the location & size of holes in the plinth.
the height of the rubber feet,
which define the height of the router from the plinth.
the location & separation of the Ethernet-ports,
which define the required height of the cable-comb, & the separation of the slots.
the Ethernet-cable thickness,
which define the width of the slots in the cable-comb.
The horizontal distance of the cable-comb from the router,
designed to accommodate my WiFi access-point, in the unused space to one side of the cables.

Augmented by some less critical dimensions, I then drew a model of the router & Ethernet-cables, to which the new parts must connect. It's tempting to plunge into the design of the new parts, but this preparatory effort proved to be a valuable guide.


Whilst I can see the attraction of watching the parts emerge from a 3D printer, I've opted to use a 3D-printing service because:

  • It allows me to use a relatively expensive printer at a reasonable price. This cost-advantage might erode if I printed parts more frequently.

  • I can try different materials & processes.

    Having said that, the parts will be made from PLA & printed by FFF, because it's cheap.

  • The technology is advancing quickly, so today's printers will become tomorrow's landfill.

  • I don't have the space to store one.

  • I don't have to fiddle with it when it breaks, & it will. This could be considered a disadvantage if technical knowledge was the goal, but then building the printer would be the project.


  • The 3D-printing service will presumably implement some pricing-algorithm which includes the weight of the filament required to construct the products, so regardless of the choice of material, the new parts shouldn't waste it.
    N.B. a 3D-printing service will typically introduce an infill-pattern within thick parts, to reduce both the use of filament & the time required.

  • The shape of the parts must compensate for the relatively weak material & the additional weakness that FFF introduces along the horizontal planes between each deposited layer. The parts aren't loaded heavily in normal service, but nothing stops someone dumping an anvil onto the router & creating a less quantifiable load, so a considerable safety-margin must be designed-in. Finite-element analysis of the parts can be used to locate any obvious weakness in the shape, though if the 3D-printing service uses infill within thick parts it may be invalidated.

  • FFF doesn't tolerate unsupported structures, so the shape & features permissible in either part must account for their orientation during fabrication. Since I've opted to build the product as two parts, their build-orientation can be independently optimised, & was in practice different.

Cable-comb (Front) Cable-comb (Back)


  • This part will be rotated by 90° during fabrication, using the large router-facing face as the build-plane.

  • The thickness of the part has been locally increased to accommodate the cable-slots.

    The cable-slots are filleted on their trailing edge, but merely chamfered on the leading edge because of the limitations of FFF.

  • The cable-slots are confined to one half of the part, leaving the other side apparently redundent; this will provide a retaining wall for the WiFi access-point.

  • This part will be attached to the plinth using three bolts, for which holes have been drilled. They're drilled 0.5 mm wider than the bolt-diameter to account for rough edges.

  • A truss has been used to save weight.

  • Filleting has been used to relieve stress around bolt-holes & sharp edges, but no filleting exists on the build-plane because of the limitations of FFF.

  • Two buttresses have been used to increase rigidity, as a more economical alternative to increasing the thickness of the whole part.

Router-plinth (Bottom) Router-plinth (Top)


  • This part will be fabricated upside down, using the flat upper surface where the router will sit, as the build-plane.

  • Considerable design-effort has been saved by exploiting the symmetry of this part; only half is actually drawn, & the mirror-image is generated in the "Part" workbench as the final operation.

  • A structural channel has been used for reduced weight & increased rigidity. This cross-section leaves the flange unobstructed by the web & free to accommodate bolt-holes. The vertical web is only 2.5 mm thick to save weight, but is flared (by means of a chamfer) to 5 mm at the two open edges of the channel to increase strength & rigidity.

  • A stress-relieving rectangular plate has been introduced around bolt-holes; one could have made these circular, but that doesn't work on vertical surfaces where the lower edge of the circle is unsupported, & it's tricky on horizontal surfaces because the filleted edge of a circle can't be allowed to meet the filleted interior edge of the structural channel, without invalidating the geometry.

  • The curved channel could be defined by using the "Draft" workbench to define a B-spline, then the "Sketcher" workbench to define a channel cross-section, & finally the "Part" workbench to sweep the cross-section along the draft line. Though a clever solution, this temptation is best avoided, since this complex curve would have to join the straight section on which the cable-comb will be mounted; floating-point errors will invalidate the geometry at this junction.

    Alternatively, one could define the flange of the structural channel, then extrude the web upwards; again floating-point errors will bedevil the curved junction between the flange & web.

    The best solution, is to define the flange & extrude a thick web, into which the channel is cut.

  • Provision has been made to attach four rubber feet, since I don't want the router to skid around.

    Accommodating the vertical bolts required to attach these feet, given the intolerance of FFF to unsupported horizontal structures, forced me to elongate the bolt-hole to the full depth of the plinth. The bolt-head must then be countersunk back down, to avoid it protruding into the level platform on which the router sits. This issue is an example of the value of creating a model of the router before designing the plinth, since without it, such details can easily go unnoticed.

    The supports for these feet double-up to buttress the web of the structural channel, reducing any tendency to buckle.

  • The bolt-holes have been elongated into slots to provide some tolerance to measurement-error, & are drilled 0.5 mm wider than the bolt-diameter to account for rough edges.

Finite-element Analysis
Von-Mises Stress Absolute Displacement
Cable-comb (Von-Mises Stress) Cable-comb (Absolute Displacement)
Router-plinth (Von-Mises Stress) Router-plinth (Absolute Displacement)

Finite-element Analysis

This analysis should identify whether these parts can withstand the design-load, but since 3D printing-services typically use infill within thicker structures & an unquantifiable load may inadvertently be placed on these parts, the main point of this analysis is to identify the location of any weakness irrespective of the load.

Applied Forces

To account for a generous amount of abuse, the expected loads were multiplied by ten; so to account for the expected ≈2 N force from the weight of cables, the analysis assumed 20 N, & to account for the expected ≈5 N force from the weight of the router, the analysis assumed 50 N.


The finite-element method, by its nature, requires a part to be tessellated into many 3D elements (hence the name). The requirements of this mesh differs from those required for 3D-printing, & therefore use a specialised application. FreeCAD makes provision to interface with suitable external mesh-generators, but that interface is necessarily generic & consequently unable to exploit any esoteric features available within a specific external mesh-generator. Regrettably the mesh resulting from this default configuration was inadequate, & resulted in errors when attempting to solve the matrix-equations. These errors may be eliminated by reducing the element-size, but at the cost of increasing the compute-time & memory-requirement. This is tolerable for the smaller cable-comb & a maximum mesh-size of 0.8 mm, but tessellating the larger router-plinth with a mesh of this size would require more RAM than immediately available, so a smarter method is required. The part can be exported in BREP-format, for import into a specialised mesh-generator (in my case Gmsh), where it can be tessellated using various algorithms (I chose "Frontal") & a variable size mesh. This more efficient mesh can be exported as an Abaqus input-file ("inp"-format) for import back into FreeCAD.


After the mesh has been generated the matrix-equations can be solved, which again requires an external application. There are several external applications from which to choose, to which FreeCAD has interfaces, but CalculiX seemed to be the most popular & aside from returning some rather cryptic errors when the mesh was too crude, worked OK.


There are many ways of looking at stress, but the measurement of concern here is Von-Mises stress, which is the component of stress which causes the part to distort & potentially fail. The ultimate tensile stress of the material is highly dependent on the processing, but my print-service claims ≈50 MPa. Similarly, when looking at the distortion of the parts, I have looked at the absolute displacement, without regard to the direction.


The stress on the cable-comb reaches a maximum of 339 kPa. It identifies a minor weakness around the top corner of the triangular cut-outs of the truss beneath the cable-slots; it was worse, so I increased the corner-radius to reduce it. There's a maximum absolute displacement of 5 µm.

Router-plinth (Exaggerated Absolute Displacement)


The stress on the router-plinth is fairly uniform, but reaches a maximum of 16.5 MPa. This maximum stress occurs where the structural channel is being bent on the tight inner curve connecting the straight front section to the curved rear, & is rather high for this material, but tolerable given the arbitrary ten-fold increase in the design-load over the expected load. There's a maximum absolute displacement of 31 µm, which can be more clearly visualised by exaggerating the absolute displacement.


I can't claim that this project is of wide applicability, or that it's going to change your life, but was fun to design & it covers a range of techniques which are likely to be of use in other maker-projects.


To account for an updated version of the router, which despite similar dimensions, had different port-locations, I redesigned the cable-comb. Regrettably, this then required the relocation of the WiFi access-point, & the design of a third part.

Router-plinth Router-plinth Router-plinth
Router-plinth Router-plinth