# The Change Logic for Data Manipulation

## Which Information is where?

The gNMI-target keeps track of the configuration and operational status of the underlying operating system and "application" specific subsystems.

## Information Storage

The information is stored in the data structure <code>type Server struct</code> in the field <code>config ygot.ValidatedGoStruct</code> in the file gnmiserver/server.go and keeps the most up-to-date known information. 

## Source for Changes

### Via gNMI Set

### Via Operating System

### Via CLI

TODO: What CLI is meant? OS or special NE CLI

## Change Logic

### Via GNMI Set 

(NB: Linux only at this time -- but principle sticks independent of OS)

- gnmiserver/server.go in doReplaceOrUpdate calls the callback function
- this triggers changes to the OS, e.g., at an networking interface
- gnmiserver/server.go does **not** change s.config (which is basically an instance of  <code>config ygot.ValidatedGoStruct</code>)
- change of OS trigger change notification via netlink,
- target receives netlink change notification
- this triggers, via a go channel, the function <code>updateOrCreateInterface</code> that updates s.config, i.e., the stored configuration of the network element